这是我的包含上传文件控件的View。所以它需要“multipart / form-data”内容类型。
@using (Html.BeginForm("Create", "RoutinTest", FormMethod.Post,
new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
<div>
@Html.LabelFor(model => model.ScannedFile)
<div>
<input type="file" name="ScannedFile" multiple="multiple" />
@Html.ValidationMessageFor(model => model.ScannedFile)
</div>
</div>
<div>
<div>
<input type="submit" value="Save" />
</div>
</div>
这是我的控制器,它是创建动作方法:
[HttpGet]
public ActionResult Create(string patientId, string fullName)
{
ViewBag.PatientId = patientId;
ViewBag.FullName = fullName;
return View();
}
[HttpPost]
public ActionResult Create() RoutinTest routintest, string patientId, string fullName)
{
}
问题是,在第二个创建操作方法(post方法)上,patientId和fullName都会丢失。 (patientId = 0和fullName = null)但我在Get方法上设置了它们。
令人惊讶的是,当我将表单内容类型更改为默认值(通过删除multipart / form-data)时,我可以拥有这两个参数值。我知道我可以通过将这两个ViewBags值设置为隐藏字段来解决问题,而无需更改表单内容类型,但我只是想知道为什么会发生这种情况?什么影响“multiPart / form-data”表单内容类型对那些ViewBags值有什么影响?
感谢
答案 0 :(得分:2)
请记住,您在网址中找到了patientId
和fullName
。将它们重新分配给ViewBag与它无关(删除ViewBag并查看会发生什么)
// Looks familliar? This is your first request.
Create?patientId=0&fullName=
默认情况下,参数会传递给第二个Create
操作方法,因为会保留URL参数。
// By default, parameters are not cleared during the second request.
Create?patientId=0&fullName=
当您设置enctype = "multipart/form-data"
时,URL参数会被清除,从而产生类似的结果。
Create
这意味着它是丢失的参数而不是ViewBag数据。
相关问题:Form Post with enctype = "multipart/form-data" causing parameters to not get passed