【发布时间】:2013-04-27 19:05:28
【问题描述】:
我在局部视图中有一个表单,它可以工作,但如果引发服务器端验证错误,它只会显示局部视图。所以我决定使用 ajax 进行提交(实际上它是有道理的,因为它正在插入一个联系人并且在主视图中有一个列表)。
问题是,如果出现其中一个错误,则发布的代码会正确显示在视图中(我需要再次使部分可见,但这是另一回事),但如果没有错误,它将显示仅在部分视图中列出。我可以反过来做,在没有错误时正确显示,但无法正确显示验证错误。
我想了解最好的方法是什么,或者至少有哪些可能性:可能会更改控制器中的代码或在成功回调中进行某种检查...
我编辑了我之前的内容,因为当没有错误时我应该返回列表,而不是我之前发布的整个视图,但无论如何我仍然对如何区分彼此有疑问,因为两者都是成功调用发布操作
谢谢
观点是这个
@model ContactListViewModel
@{
ViewBag.Title = " My Contacts"
}
<div id="ContactList">
<h2>My Contacts</h2>
<hr />
<div id="addContainer">
@{ Html.RenderAction("AddContact"); }
</div>
<div id="editContainer" data-amp-url="@Url.Action("Edit", "Contacts")" class="initiallyHidden"></div>
@foreach (var group in Model.Contacts)
{
<div class="PlanContacts">
<div class="PlanName">@group.Key</div>
@foreach (var contact in group.Values)
{
<div class="Preview">
@Html.DisplayFor(m => contact, "Contact")
</div>
}
</div>
}
</div>
@section PageJavascript
{
<script src="~/Scripts/AMPContacts.js"></script>
}
控制器发布操作
[HttpPost]
public ActionResult AddContact(AddContactViewModel viewModel)
{
var partyId = (int) Session["PartyId"];
if (ModelState.IsValid)
{
_contactsManager.AddContact(viewModel, partyId);
// Here I should return the updated list
}
var newViewModel = _createBuilder.Rebuild(viewModel, partyId);
return PartialView("_AddContact", newViewModel);
}
还有更长的AMPContact.js里面的ajax提交代码
$('#addForm').submit(function (e) {
e.preventDefault();
var addContainer = $(document.getElementById('addContainer'));
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function(result) {
addContainer.html(result);
}
});
});
【问题讨论】:
-
这个erraticdev.blogspot.co.uk/2010/11/… 看起来很有趣,我要试试这个方法
标签: c# jquery asp.net-mvc-4