这让我很困惑。控制器方法索引从我的模型库接收一个对象参数,它具有自己的数据注释规范,如下面的签名:
public ActionResult Index(vwClient Registro = null)
但是我的索引返回了一个ActionResult,其中创建了一个不同的对象模型,只是为了填充视图必需品,它有一些属性与参数Registro的名称相同但有不同的数据注释属性:
ViewModel.Registro MyViewModel = new ViewModel.Registro();
return View(MyViewModel);
我的观点是期待一个ViewModel.Registro类型的模型:
ViewModel.Registro
这就是问题所在。 ViewModel.Registro的数据注释属性已被完全忽略(DisplayFor,ValidationMessageFor)。数据注释规范来自vwClient。如果我将参数类型更改为对象,则问题将停止:
public ActionResult Index(object Registro = null)
有人知道我在这里缺少什么吗?请不要问我为什么要这样做。我只想了解这种MVC行为。
这里以类的代码为例:
//it comes from my model library. Note here the id property is marked as Required
public class vwClient
{
[Required]
[DisplayName("Client")]
public int? id { get; set; }
[DisplayName("Date")]
public DateTime dateCreation { get; set; }
[DisplayName("Company")]
public SelectList CompanyList { get; set; }
[DisplayName("Client")]
public SelectList ClientList { get; set; }
}
//here is the other class used as model by the view
public class Registro
{
[DisplayName("Client")]
public int? id { get; set; }
[DisplayName("Date")]
public DateTime dateCreation { get; set; }
[DisplayName("Company")]
public SelectList CompanyList { get; set; }
[DisplayName("Client")]
public SelectList ClientList { get; set; }
}
现在是控制器的Index方法。当我宣布Registro为vwClient时,我遇到了问题。
public ActionResult Index(vwClient Registro = null)
{
MyViewModel.Registro MyViewModel = new ViewModel.Registro();
return View(MyViewModel);
}
现在通过将Registro声明为对象来解决问题的控制器的Index方法。
public ActionResult Index(object Registro = null)
{
MyViewModel.Registro MyViewModel = new ViewModel.Registro();
return View(MyViewModel);
}
以下是视图的部分代码示例:
@model ViewModel.Registro
<div class="form-group">
@Html.LabelFor(model => model.id, htmlAttributes: new { @class = "control-label" })
<div class="form-control-wrapper">
@Html.DropDownListFor(model => model.id, selectList: (SelectList)Model.ClientList, htmlAttributes: new { @class = "form-control"}, optionLabel: string.Empty)
@Html.ValidationMessageFor(model => model.id, "", new { @class = "text-danger" })
</div>
如果问题很清楚,请告诉我。
答案 0 :(得分:0)
正如@Stephen Muecke在评论中所说:
不要在GET方法中使用模型作为参数(因为它会添加ModelState错误,这就是为什么你在视图中得到错误的原因(你甚至似乎没有使用它,那么重点是什么?)我不知道你在评论的第二部分想说什么:) - Stephen Muecke 11月19日10:51
它完全解释了我的问题。谢谢你的帮助。