У меня есть эта простая форма:
@using (Ajax.BeginForm("CreateProductFromAjaxForm","Product" ,
null,
new AjaxOptions() { HttpMethod = "post", OnSuccess = "getresult" },
null))
{
@Html.EditorFor(m => m)
<hr />
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" class="btn btn-info" value="Next" />
</div>
</div>
}
И, для тестирования, простой контроллер:
[HttpPost]
public JsonResult CreateProductFromAjaxForm(CreateProductModel model)
{
if (!ModelState.IsValid)
{
return new JsonResult()
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new { result = "error" }
};
}
//add to database
return new JsonResult()
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new { result = "success"}
};
}
Я добавил их в Web.Config:
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
и это для моего пакета script:
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js",
"~/Scripts/jquery.validate.js",
"~/Scripts/jquery.validate.unobtrusive.js"
));
После нажатия кнопки "Отправить" результирующая страница просто показывает:
{"result":"success"}
Я бы ожидал, что я смогу обработать результат в обработчике OnSuccess="getresult"
, но он не работает.
В основном я использую Ajax.BeginForm
главным образом для проверки клиентов.
Можете ли вы сказать мне, что не так?
UPDATE: я добавил HttpMethod = "post"
в AjaxOptions.
UPDATE: getresult
, определяется выше Ajax.BeginForm
следующим образом:
<script type="text/javascript">
var getresult = function (data) {
alert(data.result);
};
</script>