我在分部視圖內部有一個表單,它可以工作,但是如果引發服務器端驗證錯誤,它只顯示部分視圖。所以我決定使用ajax進行提交(實際上它是有道理的,因爲它插入了一個聯繫人,並且在主視圖中有一個列表)。在部分視圖驗證中的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);
}
});
});
我有這個http://erraticdev.blogspot.co.uk/2010/11/handling-validation-errors-on-ajax.html看起來很有趣,我會嘗試這種方法 – mitomed 2013-04-27 19:46:41