asp.net MVC中的文件上传

时间:2013-05-30 05:18:15

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

我需要在视图中添加文件上传。我在主Html.BeginForm中添加了Html.BeginForm,以便文件上传不会触及Controller方法。一旦我将文件上传到一边,它就可以了。但我需要以我的第一个表格上传文件。

不工作:

@using (Html.BeginForm())
{
    @Html.DropDownListFor(m => m.StateModel, new SelectList(Model.StateModel, "Id", "StateName"), new { @id = "ddlstate", @style = "width:200px;", @onchange = "javascript:GetCity(this.value);" })
    <br />
    <br />
    <select id="ddlcity" name="ddlcity" style="width: 200px">

    </select>

    <br /><br />

    using (Html.BeginForm("Upload", "Test", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
        <input type="file" name="file" />
        <input type="submit" value="Upload" />
    }             
}

工作:

@using (Html.BeginForm("Upload", "Test", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="file" />
    <input type="submit" value="Upload" />
}

@using (Html.BeginForm())
{
    @Html.DropDownListFor(m => m.StateModel, new SelectList(Model.StateModel, "Id", "StateName"), new { @id = "ddlstate", @style = "width:200px;", @onchange = "javascript:GetCity(this.value);" })
    <br />
    <br />
    <select id="ddlcity" name="ddlcity" style="width: 200px">

    </select>               
}

2 个答案:

答案 0 :(得分:4)

问题是您的外部表单未映射到正确的操作和控制器,这就是为什么不起作用。还请解释为什么需要两个表单标签?

 @using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{ 
    <label for="file">Upload Image:</label>
    <input type="file" name="file" id="file"/>
    <input type="submit" value="Upload Image" />
}

试试这样。这里home是你的控制器,Index是你的行动结果方法。

您可以在以下链接中查看完整示例。 http://www.dotnetjalps.com/2012/04/file-upload-in-aspnet-mvc3.html

答案 1 :(得分:1)

您无法在MVC中嵌套表单,您需要使用您的工作选项。 要么 如果要在没有表单其余部分的数据的情况下执行文件上载,则需要使用标准输入类型=按钮(不提交)并使用jQuery / javascript连接此按钮的单击事件。

例如

@*current rows *@
<div id="CurrentDetails"> 
    @Html.Partial("_DetailsGet")
</div>

@*newrow*@

  <table>
    <tbody>
      <tr>
          <td>Description</td>
          <td>Owner</td>
      </tr>
  <tr>
    <td>
    @Html.TextBoxFor(m => m.newDescription)
         </td>
    <td>
    @Html.TextBoxFor(m => m.newOwner)
        @Html.HiddenFor(m => m.ModelObject.Id)
          </td>
    <td>
    <input id="adddetails" type="button" value="+" name='btnSubmit'/>
         </td>
    </tr>
    </tbody>
    </table>  

<script>
 $().ready(function () {

        $("#adddetails").click(function () {
            var description = $("#newDescription").val();
            var owner = $("#newPropertyDetailsOwner").val();
            var id = $("#ModelObject_Id").val();
            $.ajax({
                type: "POST",
                url: "/MyRoute/DetailsAdd",
                data: {
                    id: id,
                    description: description,
                    owner: owner
                },
                success: function (data) {
                    $("#CurrentDetails").html(data);
                }

            });
        });
</script>