MVC4-Pass-Modell via Ajax.BeginForm
Ich habe versucht zu Folgen, einige gute Beiträge hier, um diese zu arbeiten, aber jedes mal, wenn ich auf die ajax-postback der Pause, in der mein controller zeigt ein Modell mit null-Werten. Diese Seite zeigt Modell Werte nur für die Anzeige, aber ich habe versucht, Sie in Ihre eigene form und auch das einwickeln von Ihnen in der ajax-form, und nichts scheint zu funktionieren.
@model VendorProfileIntranet.Models.VendorProfile
$(function () {
$("form").submit(function () {
if ($(this).valid()) {
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function (result) {
$("#message").html(result);
}
});
}
return false;
});
});
@using (Ajax.BeginForm("SelectVendor", "Home", new AjaxOptions { HttpMethod="post", InsertionMode=InsertionMode.Replace, UpdateTargetId="message" }))
{
<div style="float:right; width:500px">
<div id="message"></div>
<input id="btnSubmit" type="submit" value="Select Vendor" />
</div>
Die Aussicht ist wirklich lang (zeigt nur Modell Werte für die Anzeige) hier abgekürzt.
<div id="viewform">
<div id="viewform-contact" style="float:left;">
<fieldset>
<legend>Contact Information</legend>
@Html.HiddenFor(model => model.ProfileID)
<div class="view-field">
@Html.LabelFor(model => model.Name)
@Html.DisplayFor(model => model.Name)
</div>
<br />
<div class="view-field">
@Html.LabelFor(model => model.Email)
@Html.DisplayFor(model => model.Email)
</div>
<br />
<div class="view-field">
@Html.LabelFor(model => model.Phone)
@Html.DisplayFor(model => model.Phone)
</div>
<br />
<div class="view-field">
@Html.LabelFor(model => model.Website)
@Html.DisplayFor(model => model.Website)
</div>
<br />
<div class="view-field">
@Html.LabelFor(model => model.CompanyName)
@Html.DisplayFor(model => model.CompanyName)
</div>
<br />
<div class="view-field">
@Html.LabelFor(model => model.Address1)
@Html.DisplayFor(model => model.Address1)
</div>
<br />
<div class="view-field">
@Html.LabelFor(model => model.Address2)
@Html.DisplayFor(model => model.Address2)
</div>
<br />
<div class="view-field">
@Html.LabelFor(model => model.City)
@Html.DisplayFor(model => model.City)
</div>
<br />
<div class="view-field">
@Html.LabelFor(model => model.State)
@Html.DisplayFor(model => model.State)
</div>
<br />
<div class="view-field">
@Html.LabelFor(model => model.Zip)
@Html.DisplayFor(model => model.Zip)
</div>
<br />
<div class="view-fieldwide">
@Html.LabelFor(model => model.VendorNotes)
</div>
<br />
<div class="view-fieldwide">
@Html.DisplayFor(model => model.VendorNotes)
</div>
<br /><br />
</fieldset>
</div>
}
Controller. Ich habe versucht, die oben in ein oder zwei Formen. Mit dem obigen code das Modell enthält alle leeren Werte mit Ausnahme der ProfileID, die ausgestopft in einem versteckten input-Feld. Ich glaube, übergeben das Modell funktionieren sollte, ohne dass Sie ein verstecktes Feld für jedes Modell Wert?
[HttpPost]
public ActionResult SelectVendor(VendorProfile pageModel)
{
//handle selected vendor
_DAL.SelectVendor(pageModel.ProfileID);
return Content("This Vendor has been selected", "text/html");
}
ANTWORT
Modell Werte sind nicht gebunden durch die Verwendung von DisplayFor
Dort gibt es einen button, der beim anklicken passieren soll, wieder das Modell, das ist die andere form (nicht gezeigt) und fügen Sie einen Datensatz in der db und update-Meldung im div-tag, dass es erfolgreich war. Ich habe versucht, alle Formular-Elemente in der ajax-form und das hat nicht funktioniert, so ist eine form oder zwei Formen hat nicht funktioniert. Ich weiß, ich bin etwas fehlt.
Kannst du den rest deiner Sicht?
Siehe oben. Ich vermute, dass etwas falsch mit der Art, wie ich die eine oder zwei Formen setup. Wie ich sagte, ich habe versucht, diese ein paar Möglichkeiten bereits. THx
InformationsquelleAutor SQLGrinder | 2013-03-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie bereits angemerkt in den Kommentaren, du bist wirklich zu erwarten, um zu sehen, Elemente in Ihrem Modell, dass Sie in Ihrer form mit
DisplayFor
.DisplayFor
Felder werden nicht nach, Sie sind einfach für die Anzeige. Um der post die Werte zurück, brauchen Sie einenHiddenFor
für jedes Feld, das Sie buchen möchten, um ein Modell der Bindung zu arbeiten, es ist Magie.Was ist in Anfrage.Wenn Sie Debuggen?
Interessant... Es enthält nur 7 Tasten, es hat die ProfileID (hidden input) und die verbleibenden 2 Dutzend Objekte auf der Seite aus dem Modell, es enthält nur 6 checkbox-Werte sind alle falsch (auch wenn man auf die Seite zeigt, wahr. Das wird mit allem gefüllt in eine form und nicht geändert wird, wird der jquery-code.
Anfrage.Form nicht enthalten, die anderen Werte, die Sie haben
DisplayFor
für, du musstHiddenFor
s für jeden von denen, um ein Modell binden. Was passiert, wenn Sie das Formular abschicken, ohne jquery?Ah, Glühbirne moment. Thx. Es funktioniert auch ohne jquery. Ich bin auf der Suche in einer variation mit TextBoxFor mit readonly anzeigen würde alle Felder und ermöglichen die Modell-Bindung (anstatt beide DisplayFor und HiddenFor)
InformationsquelleAutor mattytommo