我有以下創建我ASP .NET中的操作方法MVC: -Ajax.Beginform +局部視圖+模式狀態工作不在一起
public ActionResult CreateVMNetwork(int vmid)
{
VMAssignIps vmips = new VMAssignIps()
{
TechnologyIP = new TechnologyIP() { TechnologyID = vmid},
IsTMSIPUnique = true,
IsTMSMACUnique = true
};
return PartialView("_CreateVMNetwork",vmips);
}
這會使下面的局部視圖: -
@model TMS.ViewModels.VMAssignIps
@using (Ajax.BeginForm("CreateVMNetwork", "VirtualMachine", new AjaxOptions
{
InsertionMode = InsertionMode.InsertAfter,
UpdateTargetId = "networktable",
LoadingElementId = "loadingimag",
HttpMethod= "POST"
}))
{
@Html.ValidationSummary(true)
@Html.HiddenFor(model=>model.TechnologyIP.TechnologyID)
<div>
<span class="f">IP Address</span>
@Html.EditorFor(model => model.TechnologyIP.IPAddress)
@Html.ValidationMessageFor(model => model.TechnologyIP.IPAddress)
<input type="CheckBox" name="IsTMSIPUnique" value="true" @(Html.Raw(Model.IsTMSMACUnique ? "checked=\"checked\"" : "")) /> |
<span class="f"> MAC Address</span>
@Html.EditorFor(model => model.TechnologyIP.MACAddress)
@Html.ValidationMessageFor(model => model.TechnologyIP.MACAddress)
<input type="CheckBox" name="IsTMSMACUnique" value="true" @(Html.Raw(Model.IsTMSMACUnique ? "checked=\"checked\"" : "")) />
</div>
<input type="submit" value="Save" class="btn btn-primary"/>
}
裏面主要有以下看法,點擊Ajax.actionlink後: -
@Ajax.ActionLink("Add Network Info", "CreateVMNetwork","VirtualMachine",
new { vmid = Model.VirtualMachine.TMSVirtualMachineID },
new AjaxOptions {
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "AssignNetwork" ,
LoadingElementId = "progress"
}
)
</p>
<p><img src="~/Content/Ajax-loader-bar.gif" class="loadingimage" id="progress" /></p>
<div id ="AssignNetwork"></div>
然後在「Save
」按鈕,它會調用下面的操作方法,當點擊: -
[HttpPost]
public ActionResult CreateVMNetwork(VMAssignIps vmip)
{
if (ModelState.IsValid)
{
try
{
repository.InsertOrUpdateVMIPs(vmip.TechnologyIP,User.Identity.Name);
repository.Save();
return PartialView("_networkrow",vmip);
}
catch (Exception ex)
{
ModelState.AddModelError(string.Empty, "Error occurred: " + ex.InnerException.Message);
}}
return PartialView("_CreateVMNetwork", vmip);
}
當將呈現以下的局部視圖_networkrow
: -
@model TMS.ViewModels.VMAssignIps
<tr id="@Model.TechnologyIP.ID">
<td> @Model.TechnologyIP.IPAddress</td>
<td>@Model.TechnologyIP.MACAddress</td>
<td>@Ajax.ActionLink("Delete",
"DeleteNetworkInfo", "VirtualMachine",
new { id = Model.TechnologyIP.ID },
new AjaxOptions
{ Confirm = "Are You sure You want to delete (" + Model.TechnologyIP.IPAddress + ")" + "(" + Model.TechnologyIP.MACAddress + ").",
HttpMethod = "Post",
OnSuccess = "deletionconfirmation",
OnFailure = "deletionerror"
})</td>
</tr>
上述所有將罰款除非發生模型狀態錯誤或異常,否則在這種情況下,將使用局部視圖更新表格,模型狀態將顯示在表格下方的字段中。但是我需要在同一個原始視圖上顯示模型狀態錯誤。所以我需要Ajax.begin表單才能在沒有發生異常或模型狀態錯誤時才更新表,並在原始部分視圖內顯示錯誤消息,而不是在表下。
任何人都可以建議如何解決這個問題?
感謝您的回覆,但這也會導致問題,因爲如果發生異常或模型狀態錯誤,則_CreateVMNetwork視圖將在表後插入方式。插入。因爲在所有情況下,即使局部視圖包含錯誤,Ajax.begin表單也會將局部視圖插入到表的末尾。現在更清楚我想要達到什麼目的? –
@johnG - 我瞭解你。但是我無法找出哪些代碼是你的問題......刪除那些你沒有問題的代碼,並嘗試稀疏你的Q.我知道你正在尋找這樣的東西:'var isValid =' @ Html.Raw(Json.Encode(ViewData.ModelState。IsValid))';'但我無法幫你把它放在正確的地方...... – AminSaghi