查看模型数据注释与索引方法模型数据注释参数
本文关键字:数据 模型 注释 方法 参数 索引 | 更新日期: 2023-09-27 18:22:37
这让我有点困惑。控制器方法Index从我的模型库接收到一个对象参数,该模型库有自己的数据注释规范,如下面的签名:
public ActionResult Index(vwClient Registro = null)
但我的Index返回了一个ActionResult,其中创建了一个不同的对象模型来满足视图的需要,它有一些属性与参数Registero的名称相同,但数据注释属性不同:
ViewModel.Registro MyViewModel = new ViewModel.Registro();
return View(MyViewModel);
并且我的视图期望ViewModel的模型。Registero类型:
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方法。当我将Registero声明为vwClient时,我遇到了问题。
public ActionResult Index(vwClient Registro = null)
{
MyViewModel.Registro MyViewModel = new ViewModel.Registro();
return View(MyViewModel);
}
现在,通过将Registero声明为对象来修复问题的控制器的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>
如果问题足够清楚,请告诉我。
正如@Stephen Muecke在评论中所说:
不要在GET方法中使用模型作为参数(因为它会添加ModelState错误,这就是为什么您在视图中出现错误的原因(而且您甚至似乎没有使用它,那么这有什么意义呢?)。我不知道你评论的第二部分想说什么:)——斯蒂芬·穆克11月19日上午10:51
它完全解释了我的问题。谢谢你的帮助。