MVC 3模态弹出和文件输入

时间:2011-12-01 14:51:27

标签: jquery asp.net-mvc-3 asp.net-ajax

好的,这让我开槽了!我在这个弹出窗口中有一个由Ajax.ActionLink触发的简单模态弹出窗口我有一个标准的HTML文件输入控件以及一些其他文本字段。当我提交时,我可以获得所有文本字段没有问题,但文件始终为空。以下是我的代码的副本:

更新操作:

[HttpPost]
    public ActionResult UpdateClip(ClipModel model, HttpPostedFileBase FileData, string clipID)
    {
        return RedirectToAction("Clips");
    }

这是部分形式,在模态窗口中显示:

<div class="modal_content">
    @using (Html.BeginForm("UpdateClip", "EditProfile", new { clipid = Model.ID }, FormMethod.Post, new { @id = "modalpopupform", enctype = "multipart/form-data" }))
    {
        <ul class="list_to_row">
            <li class="cell" style="width: 75px">Clip Description</li>
            <li class="cell">
                @Html.TextBoxFor(m => m.Description, new { style = "width: 350px" })<br />
                @Html.ValidationMessageFor(m => m.Description)
            </li>
        </ul>
        <ul class="list_to_row">
            <li class="cell" style="width: 75px">Base Cost</li>
            <li class="cell">
                @Model.BaseCost
            </li>
        </ul>
        <ul class="list_to_row">
            <li class="cell" style="width: 75px">Cost</li>
            <li class="cell">
                @Html.TextBoxFor(m => m.UserCost, new { style = "width: 350px" })<br />
                @Html.ValidationMessageFor(m => m.UserCost)
            </li>
        </ul>
        <ul class="list_to_row">
            <li class="cell" style="width: 75px">Preview Image</li>
            <li class="cell">
                <input type="file" id="file" name="file" />
            </li>
        </ul>
        <div class="clearfix"></div>
        <div class="modal_button_area">
            <input id="submitmodalpopup" type="submit" value="Update" class="button" />
            <input id="closemodalbox" type="button" value="Cancel" class="button" />
        </div>     
    }
</div>

有人可以对此有所了解吗?谷歌似乎没有任何东西,我的组合或如果我错过了一些我不知道的简单。欢呼声。

1 个答案:

答案 0 :(得分:0)

在您的操作中,参数称为FileData,因此在您的标记中也应保持一致:

<input type="file" id="file" name="FileData" />

或者,如果您想将文件保留为输入的名称,请在操作中重命名参数:

[HttpPost]
public ActionResult UpdateClip(ClipModel model, HttpPostedFileBase file, string clipID)
{
    return RedirectToAction("Clips");
}

但我个人认为我将这个文件作为我的视图模型的属性包含在内,我不会打扰另外一个参数:

public class ClipModel 
{
    ... some properties

    public HttpPostedFileBase File { get; set; }
}

然后在我的强类型视图中,我将使用强类型帮助器生成文件输入,这样我就不必担心正确的命名:

<li class="cell">
    @Html.TextBoxFor(x => x.File, new { type = "file" })
</li>

并且您的控制器操作签名将如下所示:

[HttpPost]
public ActionResult UpdateClip(ClipModel model)
{
    return RedirectToAction("Clips");
}

这是大多数POST控制器操作签名的样子。