在我看來,我有一個模式窗口,它有一個表單...MVC阿賈克斯防止重定向到動作控制器
@using (Html.BeginForm("controllerAction", "Controller", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="container" id="editRecordForm">
<div class="row">
<div class="col-md-6">
@Html.LabelFor(model => model.Author)
@Html.TextBoxFor(model => model.Author, new { @class = "form-control", @style = "height:auto" })
@Html.ValidationMessageFor(model => model.Author)
</div>
</div>
<br/>
<div class="row">
<div class="col-md-6">
@Html.LabelFor(model => model.Image)
<input type="file" name="file" accept="image/*">
</div>
</div>
<br />
<input type="submit" value="Submit" class="btn btn-primary">
</div>
}
這是包含Ajax請求的JS
<script>
var formdata = new FormData($('form').get(0));
$('form').submit(function() {
if ($(this).valid()) {
$.ajax({
url: this.action,
type: this.method,
cache: false,
data: formdata,
success: function (status, data) {
console.log(data);
}
});
}
return false;
});
</script>
動作控制器收到兩個參數模型和文件
[HttpPost]
public async Task<JsonResult> controllerAction(HttpPostedFileBase file, Model model)
{
var json = new
{
Success = true,
StatusCode = "200",
ErrorDesc = "OK",
ErrorCode = "",
NewId = ""
};
//some process
return Json(json, JsonRequestBehavior.AllowGet);
}
問題是爲什麼當控制器actio n完成後,它重定向到動作控制器網址
http://controller/action
並且它不保留在同一頁上?
我在做什麼錯?
聽起來像提交事件仍在傳播。你是否看到與$('form')相同的行爲?submit(function(e){'和'e.preventDefault()'? –
你顯示的代碼不會重定向。 ajax方法永遠不會正確地發佈值,因爲你沒有設置正確的選項 - 你需要'processData:false,'和'contentType:false,' - 參考[this answer](http://stackoverflow.com/questions/29293637/how-to-append-whole-set-model-to-formdata-and-obtain-it-in-mvc/29293681#29293681) –
並有'var formdata = new FormData($('form'))。 get(0));'在$('form')之前'submit(function(){'沒有任何意義 - 它在編輯任何東西之前序列化初始表單控件,但是沒有顯示相關的和/或正確的代碼來幫助(除非JavaScript已被禁用) –