我的问题是这样的,我试图在用表格封装后从视图中获取模型对象,模型看起来像这样:
public class PackageModel
{
public PackageDTO Package { get; set; }
public IEnumerable<SelectListItem> Allcategories { get; set; }
}
而PackageDTO只是一个包含许多属性的DTO对象。 现在这个模型的视图,只是显示属性,这个模型将在一个httppost请求中正常发送到索引页面(它将被处理和保存), 控制器中的索引方法如下所示:
[HttpPost]
public ActionResult Index(PackagemODEL packageModel, FormCollection form)
{
}
现在我不知道我做错了什么,但是Object packageModel不是完全为null,只是列表Allcategories和PackageDTO对象中的另一个字符串属性,其余的似乎正在工作。
该视图包含此代码
<fieldset>
<legend>@Resources.AppvManagementService_EditPackage_Title</legend>
@using (Html.BeginForm("Index","WantedController",FormMethod.Post,new {enctype="multipart/form-data"}))
{
@Html.ValidationSummary()
<labelName </label>@Html.TextBoxFor(model=>model.Package.Name) <br/>
<label>Sid </label>@Html.TextBoxFor(model=>model.Package.Sid,new {@disabled="disabled"}) <br/>
<label>Category </label>@Html.DropDownList("CategoryName",Model.Allcategories,Model.Package.Category)<br/>
<label>Description: </label>@Html.TextBoxFor(model=>model.Package.Description) <br/>
<label>Type: </label>@Html.TextBoxFor(model=>model.Package.Type) <br/>
<button type="submit">submit</button>
}
每个人
答案 0 :(得分:1)
您希望如何填充Allcategories
?您的视图包含一个字段,该字段在名称"CategoryName"
下发布值 - 您的视图中没有任何内容可填充类别列表。更重要的是;你真的需要来填充吗?在我看来,只有填充视图中的下拉列表才真正需要Allcategories
。在帖子上,你不应该需要它。如果你仍然需要它,你将不得不:
使用HttpPost
方法在控制器中重新填充它:
[HttpPost]
public ActionResult Index(PackagemODEL packageModel, FormCollection form)
{
packageModel.Allcategories = new IEnumerable<SelectListItem>();
}
使用无意义的隐藏字段将视图混乱以将值传回(我不建议将其用于项目列表,除非您确实需要):
@for (int i = 0; i < Model.Allcategories.Count; i++)
{
@Html.HiddenFor( m => m.Allcategories[i])
}
在模型构造函数中填充它:
public class PackageModel
{
public IEnumerable<SelectListItem> Allcategories { get; set; }
public PackageModel()
{
Allcategories = new IEnumerable<SelectListItem>();
/* Add values to Allcategories here */
}
}
如果Allcategories
的值没有变化,您还可以考虑将其设置为模型的static readonly
属性并对值进行硬编码(或从配置文件或类似文件中提取它们)。< / p>
至于获取所选的CategoryName,您需要在模型中存储一个字段,否则目前访问它的唯一方法是Request.Form
:
public class PackageModel
{
public IEnumerable<SelectListItem> Allcategories { get; set; }
public string CategoryName { get; set; }
}
@Html.DropDownListFor(m => m.CategoryName, Model.Allcategories, Model.Package.Category)
撇开:请,请将您的DTO从模型中取出并在模型中设置适当的属性。您的视图模型中的DTO 不属于,这是您视图的模型,仅此而已。