目前我有一个包含KendoGrid的主视图。根据用户点击的按钮,我们会看到上下文并根据点击的行显示部分视图(该行可以是电话,地址或电子类型)。我正在通过这个答案(Render Partial View Using jQuery in ASP.NET MVC)中提到的AJAX调用加载局部视图。
以下是加载表单的javascript:
function LoadEditPage(x) {
var grid = $("#contactGrid").data("kendoGrid");
var Id = grid.dataItem(x.parent().parent()).ContactId;
var Type = grid.dataItem(x.parent().parent()).ContactType;
$.get("ShowEditForm", { Id: Id, Type: Type }, function(data) {
$("#EditForm").html(data);
});
}
以下是处理部分视图请求的操作:
public ActionResult ShowEditForm(int Id, string Type)
{
var clientChannel = new ClientChannel<IContactManger>("clientEndPoint1");
var getContactByPartyIdResponse = clientChannel.Channel.GetContactByPartyID(1);
switch (Type)
{
case "Address" :
var address = getContactByPartyIdResponse.Contact.AddressDto.FirstOrDefault(x => x.ContactId == Id);
return PartialView("_Address", address);
break;
case "Telephone" :
var telephone = getContactByPartyIdResponse.Contact.PhoneDto.FirstOrDefault(x => x.CNTCT_ID == Id);
return PartialView("_Telephone", telephone);
break;
case "Electronic" :
var electronic = getContactByPartyIdResponse.Contact.ElectronicDto.FirstOrDefault(x => x.CNTCT_ID == Id);
return PartialView("_Electronic", electronic);
break;
}
return null;
}
address
,telephone
和electronic
是三种不同类型的类,并传递给三个不同的部分视图。
以下是名为_Telephone的部分视图的示例:
@model KY.COT.DS.Common.CManager.Services.DataContracts.DTO.Telephone
@using (Html.BeginForm())
{
<div>
@Html.LabelFor(m => m.AREA_CD)
@Html.TextBoxFor(m => m.AREA_CD)
@Html.ValidationMessageFor(m => m.AREA_CD)
</div>
<div>
@Html.LabelFor(m => m.LN_NMBR)
@Html.TextBoxFor(m => m.LN_NMBR)
@Html.ValidationMessageFor(m => m.LN_NMBR)
</div>
<div>
@Html.LabelFor(m => m.EXTNSN)
@Html.TextBoxFor(m => m.EXTNSN)
@Html.ValidationMessageFor(m => m.EXTNSN)
</div>
<input type="submit" value="Submit"/>
}
我遇到的问题是,当我们对表单进行编辑并提交时,我不知道应该如何设置它以使表单返回适当的验证消息而不更改我们当前的主页面上。我只希望部分视图更新,同时保持主视图相同。
我已经看到这个问题还有几个地方,但他们没有答案。如果有人能够解决这个问题,或者有其他策略,我真的很感激。提前谢谢!