我有一个视图,它是一个用于上传文件的页面。此视图调用需要传入名称的控制器以及文件名列表。我能够传递文件名列表,但我不知道如何将客户名称从我的视图传递回控制器。我不希望有一个随机文本框,因为我想使用Model.customerName中已有的特定值。
控制器
public ActionResult UploadFiles(Customer customer)
{
FileModel fileModel = new FileModel();
fileModel.customerName = customer.Name;
return View(fileModel);
}
[HttpPost]
public ActionResult UploadFiles(HttpPostedFileBase[] files)
{
foreach (HttpPostedFileBase file in files)
{
if (file != null)
{
var ServerSavePath = Path.Combine(Server.MapPath("~/Files/") + file.FileName);
file.SaveAs(ServerSavePath);
//upload to sharepoint
UploadFileToSharePoint(ServerSavePath);
ViewBag.UploadStatus = files.Length.ToString() + " files uploaded successfully.";
}
}
return View();
}
查看
@model Models.FileModel
@if (Model.customerName != null)
{
<h2>@Model.customerName</h2>
}
@using (Html.BeginForm("UploadFiles", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.files, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextBoxFor(model => model.files, "", new { @type = "file", @multiple = "multiple" })
@Html.ValidationMessageFor(model => model.files, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Upload" class="btn btn-primary" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10 text-success">
@ViewBag.UploadStatus
</div>
</div>
</div>
}
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
我尝试在enctype =“multipart / form-data”之后传入它,但它在我的控制器中显示为null。
更新 我最终在视图中使用了隐藏字段。
@Html.HiddenFor(m => m.customerName, new {Value = Model.customerName})
在我的控制器中,我必须抓住FormCollection
public ActionResult UploadFiles(System.Web.Mvc.FormCollection fc,
HttpPostedFileBase[] files)
{
string customerName = fc["customerName"];
...
}
答案 0 :(得分:0)
您可以使用隐藏字段在模型中传递模型数据。
您可以使用Html.HiddenFor()
或center-align
答案 1 :(得分:0)
你所做的一切都是正确的,除了你必须使用的正确重载,这种重载的beginform()
public static MvcForm BeginForm(
this HtmlHelper htmlHelper,
string actionName,
string controllerName,
object routeValues,
FormMethod method,
object htmlAttributes
)
在这里你必须在表格方法之前传递路线值,如下面的例子
你的例子:
查看代码:
@using (Html.BeginForm("UploadFiles", "Home",new{cusname = Model.customerName }, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
//any logic
}
控制器代码:
[HttpPost]
public ActionResult UploadFiles(HttpPostedFileBase[] files,string cusname)
{
//any logic
}
希望上面的代码很有帮助
由于
KARTHIK