0

我喜欢使用模型进行验证

<!-- ViewPage -->

<%@ Page Language="C#" Inherits="ViewPage<TopicModel>" %>

...

<%= Html.TextBoxFor(m => m.Title) %>

...

<%= Html.TextBoxFor(m => m.Description) %>


// Controller

[HttpPost]
public ActionResult NewTopic(TopicModel model)
{
     // validate
}

它工作得很好,但是当我需要传递额外的数据时,我需要创建一个新的 ViewModel 类并且我失去了灵活性。

<!-- ViewPage -->

<%@ Page Language="C#" Inherits="ViewPage<TopicViewModel>" %>

<%= Model.SomethingImportant %>

...

<%= Html.TextBoxFor(m => m.TopicModel.Title) %> // UGLY, I get name="TopicViewModel.TopicModel.Title"

...

<%= Html.TextBoxFor(m => m.TopicModel.Description) %> // UGLY, same thing


// Controller

[HttpPost]
public ActionResult NewTopic(TopicViewModel model)
{
     // validate
     var validationModel = model.TopicModel; // UGLY
}

我怎样才能使它更容易和更好看?

4

2 回答 2

1

您是否考虑过将 ViewData 字典用于模型之外的其他数据?

更新或者,使您的视图模型成为您的模型的子类并添加额外的属性,但保留基类的验证。

于 2010-08-24T07:28:01.907 回答
1

你说的第二个例子看起来很丑,实际上是比使用 ViewData 更好的做事方式。

模型的想法是它包含视图在呈现时所需的“东西”——因此它是放置视图所需的所有数据项的理想场所。

如果您真的被命名约定(框架使用它从表单帖子重新填充模型)冒犯了,您可以展平模型。这将为您提供每个项目的“漂亮”名称,但会无缘无故地进行大量工作。

于 2010-08-24T07:41:20.843 回答