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