Ajax.BeginForm не вызывает метод действия
У меня есть следующий код в представлении ym asp.net mvc бритвы:_
@using (Ajax.BeginForm("ManageCustomAsset", "Customer", new AjaxOptions
{
InsertionMode = InsertionMode.InsertBefore,
UpdateTargetId = "customassettableBody",
LoadingElementId = "progress",
HttpMethod= "POST",
OnSuccess="submitform"
}))
{
@Html.ValidationSummary(true)
@Html.AntiForgeryToken()
<div>
<span class="f"> @Html.DisplayNameFor(model=>model.CustomAsset.CustomerName) </span>
@Html.TextBoxFor(model => model.CustomAsset.CustomerName, new { disabled = "disabled" })
@Html.ValidationMessageFor(model => model.CustomAsset.CustomerName)
@Html.HiddenFor(a => a.CustomAsset.CustomerName)
</div>
<div>
<span class="f"> @Html.DisplayNameFor(model=>model.CustomAsset.CustomAssetType.Name) </span>
@Html.DropDownListFor(model=>model.CustomAsset.CustomTypeID, ((IEnumerable<TMS.Models.CustomAssetType>)ViewBag.CustomTypes).Select(option => new SelectListItem {
Text = (option == null ? "None" : option.Name),
Value = option.ID.ToString(),
Selected = (Model != null) && (Model.CustomAsset != null) && (option.ID == Model.CustomAsset.CustomTypeID)
}), "Choose...") <i class=" icon icon-blue icon-star-on "></i>
@Html.ValidationMessageFor(model=>model.CustomAsset.CustomTypeID)
</div>
<div>
<span class="f"> @Html.DisplayNameFor(model=>model.CustomAsset.Description) </span>
@Html.TextBoxFor(model => model.CustomAsset.Description)
@Html.ValidationMessageFor(model => model.CustomAsset.Description)
</div>
<input type="submit" value="Save" class="btn btn-primary"/>
}
но когда я нажимаю на форму, она не достигнет следующего метода действия, что происходит, если загрузочное изображение будет показано, а затем ничего не произойдет, и я даже не получу сообщение об ошибке???
[HttpPost]
[ValidateAntiForgeryToken]
[CheckUserPermissions(Action = "Edit", Model = "CustomAsset")]
public ActionResult ManageCustomAsset(CustomerCustomAssetJoin ccaj)
{
if (ModelState.IsValid)
{
try
{
string ADusername = User.Identity.Name.Substring(User.Identity.Name.IndexOf("\\") + 1);
repository.InsertOrUpdateCustomerCustomAsset(ccaj.CustomAsset, ADusername);
// repository.Save();
return PartialView("_customerCustomAsset", ccaj);
}
catch (Exception ex)
{
//ModelState.AddModelError(string.Empty, "Error occurred: " + ex.InnerException.Message);
return Json(new { IsSuccess = "False", description = ex.InnerException.InnerException.Message.ToString() }, JsonRequestBehavior.AllowGet);
}
}
return View(ccaj);
}
2 ответа
Это может быть связано с токеном против подделки. Ваша реализация ValidateAntiForgeryToken
атрибут вашего действия, но у вас есть @Html.AntiForgeryToken()
закомментировано на ваш взгляд.
Вы добавляете это JS?
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
Пример:
Модель:
public class MyViewModel
{
[Required]
public string Foo { get; set; }
}
контроллер:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel());
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
return Content("Thanks", "text/html");
}
}
Посмотреть:
@model AppName.Models.MyViewModel
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
<div id="result"></div>
@using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "result" }))
{
@Html.EditorFor(x => x.Foo)
@Html.ValidationMessageFor(x => x.Foo)
<input type="submit" value="OK" />
}