Я попытался последовать за некоторым good posts здесь, чтобы заставить это работать, но каждый раз, когда я нажимаю ajax postback, точка прерывания в моем контроллере показывает модель с нулевыми значениями. На этой странице отображаются только значения модели для просмотра, но я попытался поместить их в свою форму, а также обернуть их в форме ajax и ничего не работает.MVC4 Pass модель через Ajax.BeginForm
@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>
Вид действительно длинный (просто отображает значения модели для просмотра), сокращенно здесь.
<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>
}
контроллер. Я пробовал это в одной или двух формах. С приведенным выше кодом модель содержит все пустые значения, кроме идентификатора профиля, который заполняется в скрытом поле ввода. Я думаю, что прохождение модели должно работать без необходимости создания скрытого поля для каждого значения модели?
[HttpPost]
public ActionResult SelectVendor(VendorProfile pageModel)
{
// handle selected vendor
_DAL.SelectVendor(pageModel.ProfileID);
return Content("This Vendor has been selected", "text/html");
}
ОТВЕТ
Значения модели не переплетены из-за использования Displayfor
У вас, похоже, не хватает элементов ввода в вашей форме ' –
@ Forty-Two Существует кнопка, которая при нажатии должна передать модель, которая является другой формой (не показана), и вставить запись в db и сообщение об обновлении в div, который был успешным. Я попытался поместить все элементы формы в форму ajax, и это тоже не сработало, поэтому одна форма или две формы не работали. Я знаю, что чего-то не хватает. – SQLGrinder
Можете ли вы опубликовать остальную часть своего мнения? – mattytommo