【问题标题】:setting enctype = "multipart/form-data" causes all ViewBags value be lost设置 enctype = "multipart/form-data" 会导致所有 ViewBags 值丢失
【发布时间】:2014-03-04 17:40:39
【问题描述】:

这是我的包含上传文件控件的视图。所以它需要“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)
{

}

问题是在第二个 Create 操作方法(post 方法)上,patentId 和 fullName 都丢失了。 (patientId = 0 and fullName = null) 但我将它们都设置为 Get 方法。

令人惊讶的是,当我将表单内容类型更改为默认值(通过删除 multipart/form-data)时,我能够拥有这两个参数值。我知道我可以通过将这两个 ViewBags 值设置为隐藏字段来解决问题而无需更改表单内容类型,但我只想知道为什么会发生这种情况? “multiPart/form-data”表单内容类型对这些 ViewBags 值有何影响?

谢谢

【问题讨论】:

    标签: asp.net-mvc forms model-view-controller multipartform-data


    【解决方案1】:

    请记住,您的 patientIdfullName 可以在 URL 中找到。将它们重新分配给 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

    【讨论】:

    • 约罗:非常感谢。您能否告诉我是否有任何其他方法可以检索 URL 参数,而不是使用以下方法:Request.Params["fullName"]
    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-25
    • 2014-03-07
    • 2018-01-28
    • 2015-03-04
    • 2014-10-27
    相关资源
    最近更新 更多