我是asp.net mvc的新手,但我在各处都仔细搜索过这个主题。
我有一个名为PictureViewModel的ViewModel类,它是EditorTemplate视图继承的类: <%@ Control Language =“C#”Inherits =“System.Web.Mvc.ViewUserControl”%>
<div class="editor-label"><%: Html.LabelFor(m=>m.Name) %></div>
<div class="editor-field"><%: Html.TextBox("form.Name") %></div>
<div class="editor-label"><%: Html.LabelFor(m=>m.Description) %></div>
<div class="editor-field"><%: Html.TextArea("form.Description") %></div>
<% Html.RenderAction("SelectCategory", "Category"); %>
<div class="editor-label"><label for="thumbFile">Thumb</label></div>
<div class="editor-field"><input id="thumbFile" name="thumbFile" type="file"/></div>
<div class="editor-label"><label for="fullFile">Full</label></div>
<div class="editor-field"><input id="fullFile" name="fullFile" type="file"/></div>
此外,我还有文件字段和所有发布到自身的文件
<%@ Page Title="" Language="C#" MasterPageFile="/Views/Shared/Site_Table.Master"
Inherits="System.Web.Mvc.ViewPage<MvcApplicationVelarPolya.Areas.Admin.Models.PictureViewModel>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Create
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Create</h2>
<%
using (Html.BeginForm("create", "Pictures", FormMethod.Post, new {enctype="multipart/form-data"}))
{%>
<%: Html.EditorForModel() %>
<input type="submit" name="Create" />
<% }%>
</asp:Content>
以下是专门用于处理提交的代码:
[HttpPost]
public ActionResult Create([Bind(Prefix="form")] PictureViewModel pm)
{
try
{
var p = new PictureViewModel();
UpdateModel(p, "",new[] {"Name", "Description"});
ViewData["name"] = Request.Files[0].FileName;
return View("New", p);
}
catch
{
return View();
}
}
添加前缀,也不使用FormCollection和UpdateModel都无济于事。 我非常感谢任何帮助! 安德鲁。
哦,是的,viewdata正确填充了文件名!
这也行不通 [HttpPost] public ActionResult Create(FormCollection fc / [Bind(Prefix =“form”)] PictureViewModel pm /) { 尝试 { var p = new PictureViewModel(); UpdateModel(p,“form”,new [] {“Name”,“Description”}); ViewData [“name”] = Request.Files [0] .FileName; // TODO:在这里添加插入逻辑 return View(“New”,p); return RedirectToAction(“Index”); } 抓住 { return View(); } }
这段代码
foreach (var k in fc)
{
Debug.WriteLine(k.ToString());
}
正在制作
form.Name
form.Description
CategoryID
Create
答案 0 :(得分:1)
在你的编辑器模板中,你应该使用强类型助手(TextBoxFor
和TextAreaFor
),你可以摆脱魔术字符串和前缀:
<div class="editor-label"><%: Html.LabelFor(m => m.Name) %></div>
<div class="editor-field"><%: Html.TextBoxFor(m => m.Name) %></div>
<div class="editor-label"><%: Html.LabelFor(m => m.Description) %></div>
<div class="editor-field"><%: Html.TextAreaFor(m => m.Description) %></div>
<% Html.RenderAction("SelectCategory", "Category"); %>
<div class="editor-label"><label for="thumbFile">Thumb</label></div>
<div class="editor-field"><input id="thumbFile" name="thumbFile" type="file"/></div>
<div class="editor-label"><label for="fullFile">Full</label></div>
<div class="editor-field"><input id="fullFile" name="fullFile" type="file"/></div>
要处理上传的文件,您可以将它们添加为视图模型属性或操作参数:
public class PictureViewModel
{
public string Name { get; set; }
public string Description { get; set; }
public HttpPostedFileBase ThumbFile { get; set; }
public HttpPostedFileBase FullFile { get; set; }
}
...
[HttpPost]
public ActionResult Create(PictureViewModel pm)
{
// Normally the pm variable should be fully
// initialized here from the POST request and you can use it directly
// No need to call UpdateModel
return View("New", pm);
}