私はasp.net mvc Webアプリケーションに取り組んでおり、次のメインビューがあります:-
<div class="box-content">
@using (Ajax.BeginForm("AssignCustomer", "Firewall", new AjaxOptions
{
InsertionMode = InsertionMode.InsertAfter,
UpdateTargetId = "Customertable",
LoadingElementId = "progress",
HttpMethod= "POST",
OnSuccess="submitform"
}))
{
@Html.ValidationSummary(true)
@Html.AntiForgeryToken()
@Html.HiddenFor(model=>model.FirewallCustomer.ID)
<div>
<span class="f">Customer Name</span>
@Html.TextBoxFor(model => model.FirewallCustomer.CustomerName, new { data_autocomplete_source = Url.Action("CustomerAutoComplete", "Firewall") })
@Html.ValidationMessageFor(model => model.FirewallCustomer.CustomerName)
</div>
<input type="submit" value="Save" class="btn btn-primary"/>
}
<p><img src="~/Content/Ajax-loader-bar.gif" class="loadingimage" id="progress" /></p>
<table class="table table-striped table-bordered bootstrap-datatable datatable">
<thead>
<tr>
<th class="f"> Customer Name </th>
</tr></thead>
<tbody id="Customertable">
@foreach(var info in Model.Firewall.FirewallCustomers.OrderBy(a=>a.CustomerName)){
<tr id= "@info.CustomerName">
<td> @Html.ActionLink(info.CustomerName, "Index", "Customer", new {searchTerm=info.CustomerName},null)</td>
<td></td>
</tr>
}
</tbody>
</table> </div></div></div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
これは、Ajax.begin フォームを送信するときに次のアクション メソッドを呼び出します。
[HttpPost]
[ValidateAntiForgeryToken]
[CheckUserPermissions(Action = "Edit", Model = "Firewall")]
public ActionResult AssignCustomer([Bind(Include = "FirewallCustomer")] FirewallJoin fc)
{
fc.FirewallCustomer.CustomerName = fc.FirewallCustomer.CustomerName.Trim();
if (ModelState.IsValid)
{
try
{
repository.InsertOrUpdateFirewallCustomer(fc.FirewallCustomer,ADusername);
repository.Save();
return View("_customerrow", fc.FirewallCustomer);
アクション メソッド呼び出しから返された部分ビュー (テーブル本体の後に挿入する必要があります) は次のようになります。
@model TMS.Models.FirewallCustomer
<tr id="@Model.CustomerName.ToString()">
<td>@Model.CustomerName</td>
<td>
@Ajax.ActionLink("Delete",
"DeleteCustomerFirewall", "Firewall",
new { firewallid = Model.ID, customername = Model.CustomerName},
new AjaxOptions
{ Confirm = "Are You sure You want to delete " + Model.CustomerName,
HttpMethod = "Post",
OnSuccess = "deletionconfirmation",
OnFailure = "deletionerror"
})
</td>
</tr>
メインビュー内の ajax.beginform をクリックすると、レコードが DB に追加されますが、部分ビューは返されず、代わりに次の例外が発生します:-
0x80020101 - JavaScript runtime error: Could not complete the operation due to error 80020101.
そして、jquery 1.8.2 は、次のコードで例外をスロー (throw e) します:-
if ( !transport ) {
done( -1, "No Transport" );
} else {
jqXHR.readyState = 1;
// Send global event
if ( fireGlobals ) {
globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
}
// Timeout
if ( s.async && s.timeout > 0 ) {
timeoutTimer = setTimeout( function(){
jqXHR.abort( "timeout" );
}, s.timeout );
}
try {
state = 1;
transport.send( requestHeaders, done );
} catch (e) {
// Propagate exception as error if not done
if ( state < 2 ) {
done( -1, e );
// Simply rethrow otherwise
} else {
throw e;
}
}
誰でもこの問題の原因を教えてもらえますか?