【发布时间】:2011-06-10 20:34:51
【问题描述】:
这个问题已经困扰我两天了。有一些类似的帖子,但没有一个可以完全解决我的问题。
使用 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 的 Edit,正如预期的那样,MyMainModle 的所有数据都完好无损......除了 ThumbnailModel 的列表 - 那些结果为空。
这应该怎么做?我已经尝试了许多不同的方法,包括制作一个可编辑的模板和使用 EditFor(o=>... 都无济于事(这变得令人困惑,因为我不知道 EditFor 是应该用于整个集合还是只是集合中的单个项目 - 我尝试了两种方法)。所有这些都可以正常工作,直到我添加了删除复选框的复杂性,因此需要检索 ThumbnailModels 列表以检查该内部 Delete 属性值。
感谢大家阅读并尝试理解这一点。
[免责声明 - 一些变量和方法名称已被更改以保护无辜程序。很多代码已经被剥离并被注释代码取代。]
【问题讨论】:
-
不应该是
thumbnail=>thumbnail.Delete吗?
标签: model asp.net-mvc-3 razor