在我的MVC应用程序中,我有一个包含以下内容的视图 1.一个下拉列表 2.上传一个文件 3.一键提交表格。
表单代码(查看)
<form id="upload" enctype="multipart/form-data" action="@Url.Action("ExcelUpload", "NBL")" method="POST">
@Html.DropDownList("CustomerName", new List<SelectListItem>
{
new SelectListItem() {Text = "Customer 1", Value="CM1"},
new SelectListItem() {Text = "Customer 2", Value="CM2"}
}, new { @class = "form-control", @style = "width:auto" })
<input type="file" name="fileUpload" id="fileUpload" size="23" style="margin-top:5px"/>
<button class="btn btn-primary">Upload</button>
</form>
当我单击按钮时,我能够在控制器中成功传递文件。
控制器代码
public ActionResult ExcelUpload(HttpPostedFileBase FileUpload)
{
if (FileUpload != null)
{
// Do Stuff here.
}
}
我的问题是,当我单击按钮时,我还希望控制器中的下拉选定值。如何在控制器中同时传递“下拉选定值”和文件?
答案 0 :(得分:0)
问题在于您的模型并不代表您要使用的视图或数据。因此,建立一个像这样的模型:
using System.ComponentModel.DataAnnotations;
namespace Models
{
public class MyUploadModel
{
[Required]
public HttpPostedFileBase File { get; set; }
[Required]
public string CustomerName { get; set; }
}
}
在视图中使用该模型生成表单,然后在控制器中使用
:public ActionResult ExcelUpload(Models.MyUploadModel myModel)
{
if (ModelState.IsValid)
{
// all good, save
}
return View(myModel);
}
当然,您可以在操作中添加一个字符串参数,但这更加健壮,并且可以表示MVC模式(模型/视图/控制器)。
答案 1 :(得分:0)
下拉元素的名称为CustomerName
,位于表单中。浏览器会将其作为键值对发布到服务器,其中键是下拉列表的名称,而值将是用户选择的值。
MVC框架的默认联编程序将查找名为ExcelUpload
的操作,该操作具有参数string customerName
或具有复杂类型(Model
)且具有CustomerName
作为财产。
将您的操作更改为:
ExcelUpload(HttpPostedFileBase FileUpload, string customerName)