를 작동하지 않는 내가 가지고있는 나의 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
"버튼을 클릭하면 : - :
@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>
위의 모든 잘 작동합니다 -
[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
렌더링 모델 상태 오류 또는 예외가 발생하지 않으면이 경우 테이블이 부분 뷰로 업데이트되고 모델 상태가 필드가있는 테이블 아래에 표시됩니다. 하지만 동일한 원본보기에 모델 상태 오류를 표시해야합니다. 따라서 예외 나 모델 상태 오류가 발생하지 않는 경우에만 테이블을 업데이트하고 Ajax.begin 폼을 사용하여 테이블 아래가 아니라 원래 부분 뷰 내부에 오류 메시지를 표시해야합니다.
누구든지이 문제를 해결하는 방법에 대한 조언을 구할 수 있습니까?
답장을 보내 주셔서 감사합니다. 그러나 예외 또는 모델 상태 오류가 발생하는 경우 _CreateVMNetwork보기가 InsertionMode.InsertAfter 테이블이되므로 문제가 발생할 수도 있습니다. 부분 뷰에 오류가 있어도 모든 경우에 Ajax.begin 양식은 부분 뷰를 테이블의 끝에 삽입하기 때문에. 달성하기 위해 노력하고있는 것이 지금은 무엇입니까? –
@ johnG - 이해합니다. 그러나 어떤 코드가 문제인지 알 수 없습니다 ... 문제가없는 코드를 제거하고 Q를 스파 스하려고하십시오. 다음과 같은 것을 찾고 있습니다. 'var isValid =' @ Html.Raw (Json.Encode (ViewData.ModelState.IsValid)) ';'하지만 올바른 장소에 넣는 것을 도와 줄 수는 없습니다 ... – AminSaghi