我目前有一个包含普通文本输入和文件(上传)输入的表格。
所以我的viewModel的结构大致如下:
public string PROD
public string WH
public HttpPostedFileBase ImageFile
public HttpPostedFileBase ImageFile
我的视图的构建方式如下:
@model ISE.Solution2.ViewModel.INV_Master
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "product-master-form", enctype = "multipart/form-data" }))
{
@Html.LabelFor(model => model.PROD, htmlAttributes: new { @class = "control-label col-sm-3 col-form-label" })
<div class="col-sm-9">
@Html.DropDownListFor(model => model.PROD, Enumerable.Empty<SelectListItem>(), new { @id = "product-code", @class = "form-control" })
</div>
<!--more markup written here -->
}
因此表单最初是由
控制器中的public ActionResult MasterCl(int? id){}
。
提交表单后,当前会转到控制器中的另一种方法:
[HttpPost]
public async Task<ActionResult> MasterCl(INV_Master masterViewModel){}
所以上面的方法只是return View()
这意味着我回到表单所在的页面,大概该字段中的所有填充字段都保持不变。但是我的页面看起来像这样:
我的记录已正确保存到数据库中,但是下拉字段的状态丢失,因为它们是用javascript创建的。它们不是普通的html <select>
元素。
我想防止这种情况的发生。因为在将表单数据发送到服务器端后,可能已经完成了服务器端验证,并且表单中可能存在错误,因此我想提示某种通知。我在想用户将返回到已填写的表单,并且我显示了一个JavaScript alert
,指出未正确填写表单的哪一部分。
我在这一部分迷路了。我在想是否可以使用Ajax.BeginForm
来将数据发布到控制器。如果这样做,那么我仍将停留在页面中,并且POST的响应由所提供的JSON字符串确定,因此我将能够使用js来显示该内容的警报。问题是我不确定我是否可以使用AJAX。