包含模型列表的模型(MVC-3,Razor)
这个问题一直困扰我两天了。有一些类似的帖子,但没有一个完全解决我的问题。
使用MVC-3,Razor语法: – EDIT.cshtml – @using (Html.BeginForm("Edit","My",FormMethod.Post,new { enctype = "multipart/form-data" })) { <!-- Some fields... --> <div class="editor-field"> @Html.TextAreaFor(m => m.LongDescription) @Html.ValidationMessageFor(m => m.LongDescription) </div> <!-- Some more fields work... Including picture upload (summary).--> <input name="button" type="submit" value="Add Picture" /> <!-- Picture Item display --> @foreach(var thumbnail in Model.ThumbnailImagePathAndNames) { <img src="@Url.Content(@thumbnail.ThumbnailPicturePath)" alt="" width="200" /> @Html.RadioButtonFor(o=>o.SelectedImage,@thumbnail.ImageGUID) Primary Picture <!-- Checkbox to mark for deletion --> @Html.CheckBoxFor(o=>thumbnail.Delete) Delete ???????? <!---- Here is a problem - I don't understand how this should work --> } <input id="Submit1" name="button" type="submit" value="Complete Edit!" /> } – MyController.cs – [HttpPost] public ActionResult Edit(String button,HttpPostedFileBase file,MyMainModel model) { // if button = submit picture,work with picture here and break(long story) // save model data // if valid,save and redirect // not valid or error,load up view like normal but with error messages model.LoadThumbnails(); return View(model); } – MyMainModel.cs – public class MyMainModel { // some properties... public Guid? SelectedImage { get; set; } [Display(Name = "Detailed Description")] public String LongDescription { get; set; } // some more properties.... // and finally my list of models public IList<ThumbnailModel> ThumbnailImagePathAndNames { get; set; } public void LoadThumbnails() { // load up initial thumbnail models this.ThumbnailImagePathAndNames = new List<ThumbnailModel>(readDataService.GetThumbnailModels(this.SomeID)); } } – ThumbnailModels.cs – public class ThumbnailModel { public Guid ImageGUID { get; set; } public String FullSizePicturePath { get; set; } public String ThumbnailPicturePath { get; set; } public bool Delete { get; set; } } 所以有什么问题?好了,当“完成编辑!按钮,MyController的编辑被调用,如所期望的所有MyMainModle的数据在tact ….除了ThumbnailModel的列表 – 那些结果是null。 这应该怎么做?我尝试了许多不同的方法,包括使一个可编辑的模板和使用EditFor(o => …所有无法使用(这变得混乱,因为我不知道EditFor是否应该是整个集合或只是在集合中的一个项目 – 我尝试了两种方式)。所有使用的工作,直到我添加复选框的删除,因此需要检索ThumbnailModels列表检查内部Delete属性值。 谢谢大家的阅读和试??图理解这一点。 [免责声明 – 一些变量和方法名称已更改以保护无辜程序。很多代码已经被删除,并替换为注释代码。] 解决方法
这里有一个例子,我用来说明一些概念:
模型: public class MyMainModel { public Guid? SelectedImage { get; set; } public string LongDescription { get; set; } public IEnumerable<ThumbnailModel> ThumbnailImagePathAndNames { get; set; } public HttpPostedFileBase File { get; set; } } public class ThumbnailModel { public Guid ImageGUID { get; set; } public bool Delete { get; set; } } 控制器: public class HomeController : Controller { public ActionResult Index() { var model = new MyMainModel { // TODO: fetch from the repository instead of hardcoding ThumbnailImagePathAndNames = new[] { new ThumbnailModel { ImageGUID = Guid.NewGuid() },new ThumbnailModel { ImageGUID = Guid.NewGuid() },} }; return View(model); } [HttpPost] public ActionResult Index(MyMainModel model) { ... the model will be properly bound here } } 视图: @model AppName.Models.MyMainModel @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; } @using (Html.BeginForm("index","home",new { enctype = "multipart/form-data" })) { <div class="editor-field"> @Html.TextAreaFor(m => m.LongDescription) @Html.ValidationMessageFor(m => m.LongDescription) </div> <input type="file" name="file" /> <!-- Use different names for the upload and complete submit buttons so that you can distinguish which one was clicked in the POST action --> <input name="upload" type="submit" value="Add Picture" /> @Html.EditorFor(x => x.ThumbnailImagePathAndNames) <input name="complete" type="submit" value="Complete Edit!" /> } 编辑器模板:(?/ Views / Home / EditorTemplates / ThumbnailModel.cshtml): @model AppName.Models.ThumbnailModel <!-- Pass the image id as hidden field --> @Html.HiddenFor(x => x.ImageGUID) @Html.CheckBoxFor(x => x.Delete) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-3 – 自动映射似乎不像’Name’字段
- asp.net – Web API中的每路径格式化程序配置
- asp.net-mvc – ASP.NET MVC获取下拉列表值
- asp.net – .NET 4.5中的样式包和CSS中的图标
- asp.net-mvc – MVC 4提供的反伪造令牌是为用户“”而是当前
- asp.net-mvc – ASP.NET MVC – 使用表单发布多个复杂对象
- 什么时候不是在asp.net中使用runat =“server”?
- vsdoc文件是否适用于vbscript?
- 视图页面中的asp.net标识声明全名
- asp.net-mvc – DataAnnotations动态附加属性
- asp.net-mvc – 我们可以为ASP.NET MVC 5中的角色
- 是否可以在ASP.NET 5的Web API中使用外部身份提供
- asp.net – MVC3 WebImage助手:resize将透明背景
- asp.net – 不能在aspx页面的部分使用Response.W
- asp.net-mvc – ScriptBundle中的{version}是什么
- asp.net – UserHostAddress提供错误的IP
- asp.net – 动态编译的文件在.NET中使用csc.exe吗
- ASP.NET requestValidation 4.5和WIF
- asp.net-mvc – 在mvc下拉列表中自动恢复
- asp.net – 单击GridView行上的任意位置以进入编