1

我需要在我的视图中添加文件上传。我在我的主 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>               
}
4

2 回答 2

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

于 2013-05-30T05:23:50.860 回答
1

您不能在 MVC 中嵌套表单,您需要使用您的工作选项。或者如果您想在表单的其余部分没有数据的情况下执行文件上传,您将需要使用标准输入 type=button(不是提交)并使用 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>
于 2013-05-30T05:36:40.743 回答