HttpPostedFileBase始终为null

时间:2013-09-11 07:02:47

标签: c# asp.net-mvc razor

我有这样的控制器:

public ActionResult SaveBook(Book coll, HttpPostedFileBase EBook)
{
}

并查看如下:

@using (Html.BeginForm("SaveBook", "Book", FormMethod.Post,
            new { enctype = "multipart/form-data" }))
{
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>Book</legend>

        <table>
            <tr>
                <td>@Html.LabelFor(model => model.Title)</td>
                <td>@Html.EditorFor(model => model.Title)@Html.ValidationMessageFor(model => model.Title)</td>
            </tr>
            <tr>
                <td>@Html.LabelFor(model => model.ISBN)</td>
                <td>@Html.EditorFor(model => model.ISBN)@Html.ValidationMessageFor(model => model.ISBN)</td>
            </tr>
 <tr><td>@Html.LabelFor(model => model.EBook) </td><td>@Html.TextBoxFor(model => model.EBook, new { type = "file", accept = ".pdf" })
    @Html.ValidationMessageFor(model => model.EBook)</td></tr>
        </table>
        <p>
            <input type="submit" value="SaveBook" />
        </p>
    </fieldset>
}

我的模特是这样的:

[Required(ErrorMessage = "Title Required")]
public  String  Title { get; set; }
[Required(ErrorMessage = "ISBN Required")]
public  String  ISBN { get; set; }
public HttpPostedFileBase EBook { get; set; }

但我仍然在“EBook”对象或Controller的“coll”对象中获得EBook“null”值的值。有什么建议吗?

3 个答案:

答案 0 :(得分:0)

由于模型中有相同的名称,因此您将其设为null。昨天发生在我身上,并将其中一个重命名为其他东西。

请尝试以下操作:

    <div class="editor-field">
        <input type="file" name="file" />
    </div>

您应该采取行动

public ActionResult SaveBook(Book coll, HttpPostedFileBase file)
{
}

答案 1 :(得分:0)

EBook已经是您的模型的属性。将您的操作更改为以下内容,以使模型绑定正常工作:

[HttpPost]
public ActionResult SaveBook(Book coll)
{ 
}

答案 2 :(得分:0)

我现在发现的事实。我增加了maxRequestLength,如:

  <httpRuntime targetFramework="4.5" maxRequestLength="1048576" />

并且有效。