1

它看起来与其他问题相似,但他们遇到的所有问题都是 HTML 中输入类型 =“文件”的名称与控制器中的参数名称之间的命名不匹配。我已经多次检查并重新检查了很多东西,但 HttpPostedFileBase 的值仍然始终返回为 null,这导致控制器中出现 NullReferenceException。这是代码:- HTML 代码:-

    @using (Html.BeginForm(new { enctype = "multipart/form-data" }))
     {
@Html.ValidationSummary(true)
<fieldset>
    <legend>Please Fill in the following details and Upload your Design Pic</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.chest)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.chest)
        @Html.ValidationMessageFor(model => model.chest)
    </div>
    <p>
        <label for="file">Design File Pic:</label>
        <input type="file" name="file" />
    </p>
    <p>
        <input type="submit" value="Order" />
    </p>

在控制器中:-

    [HttpPost]
    [Authorize]
    public ActionResult Index(DesignOrder order, HttpPostedFileBase file)
    {
        string fileurl=null;
        if (file.ContentLength > 0) {
            fileurl = Path.Combine("../../Images/UserUploads",User.Identity.Name + file.FileName);
            file.SaveAs(fileurl); 
        }
    }

if(file.ContentLength>0) 出现错误——NullreferenceException。

4

1 回答 1

3

因为Html.BeginForm(object)是 for RouteValues,而不是元素属性。您需要对属性使用更大的重载。试试这个:

Html.BeginForm("action", "controller", null, FormMethod.Post, new { enctype = "multipart/form-data" })

请参阅此处了解我的意思: http: //msdn.microsoft.com/en-us/library/dd470793 (v=vs.108).aspx

于 2013-04-02T02:04:33.087 回答