-4

我是 mvc 的新手,通过 wrox 书学习它。我遇到的事情很少,我正在寻找好的澄清。为一次提出许多问题而道歉。

1) @Html.DisplayFor & @Html.EditFor

当我们使用 @Html.DisplayFor 时,客户端会呈现什么 html 控件?当我们使用 @Html.EditFor 时,客户端会呈现什么 html 控件?

2) ModelState.IsValid 做什么?

我总是看到 ModelState.IsValid 返回 true ?当它实际上返回 false ?

3) 如何从 ModelState 中提取表单提交的值?

我尝试这样做,例如 ModelState["Name"] 或 ModelState["Name"].ToString() 都给出错误。

4) 什么是 mvc 中的远程验证?

5)当我们使用 html helper 来呈现文本框时,我怎么能附加多个属性呢。我试过这种方式

我试图以这种方式显示模型文本但没有

@Html.LabelFor(m => m.Name, new { @id = "name", @class = "", title = "@m.Name" })

我们不能像这样指定或分配模型文本 title = "@m.Name" 吗?如果不是,那么我如何将模型文本分配给标题属性?

当我们使用 html 控件属性时需要使用 @ 符号时

6)是否可以直接从视图中调用不同类型的函数/方法我想知道

a) 如果我的静态函数或静态类函数很少,那么我们可以直接从视图中调用它吗?

b)我们可以直接从视图中控制方法吗?

c) 如何直接从视图中调用任何泛型方法?

d) 是否可以直接从视图调用任何操作方法?

e) 我们可以直接从视图调用任何模型方法吗?

哪些是可能的,哪些是不可能的,请用原因和示例代码解释

7)关于数据标注

我想使用数据注释,但我希望数据注释应该在页面中呈现不同的 js 以获取花哨的验证消息。如何使用带有数据注释的不同 jquery 验证插件......我们需要更改代码的地方。

请用示例和示例代码明智地回答我所有的问题,以便更好地理解。谢谢

4

1 回答 1

2

当我们使用 @Html.DisplayFor 时,客户端会呈现什么 html 控件?

这完全取决于您要调用的属性的特定类型DisplayFor。助手将DisplayFor分析表达式中使用的属性的具体类型并调用相应的显示模板。您还可以为您的视图模型类型编写自定义显示模板。Brad Wilson 写了一篇关于模板的精彩博客文章,我邀请您阅读以更好地熟悉基本概念:http ://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part- 1-introduction.html

有一系列帖子,请确保您已全部阅读。

当我们使用 @Html.EditFor 时,客户端会呈现什么 html 控件?

这完全取决于您要调用的属性的特定类型EditorFor。助手将EditorFor分析表达式中使用的属性的具体类型并调用相应的编辑器模板。您还可以为您的视图模型类型编写自定义编辑器模板。Brad Wilson 写了一篇关于模板的精彩博客文章,我邀请您阅读以更好地熟悉基本概念:http ://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part- 1-introduction.html

有一系列帖子,请确保您已全部阅读。

我总是看到 ModelState.IsValid 返回 true ?当它实际上返回 false ?

当有错误添加到 ModelState 时。如果您在视图模型上使用了一些数据注释进行验证,并且提交给服务器的值未能通过此验证,则可能会发生这种情况。通常,在ModelState.IsValid将请求值绑定到您的视图模型时,默认模型绑定器会将错误消息添加到 ModelState(返回 false)。

我尝试这样做,例如 ModelState["Name"] 或 ModelState["Name"].ToString() 都给出错误。

在 ASP.NET MVC 中,您使用视图模型。您的[HttpPost]控制器操作将视图模型作为参数,该参数是专门为满足您的视图逻辑目的而设计的类。下面是一个典型的 POST 操作在 ASP.NET MVC 中的样子的示例:

[HttpPost]
public ActionResult SomeAction(MyViewModel model)
{
    if (!ModelState.IsValid)
    {
        // validation on the view model failed => redisplay the view 
        // so that the user can fix the errors
        return View(model);
    }

    // At this stage you know that the model has passed validation
    // It is here that you would typically map the view model to some domain model(s)
    // and pass them to your DAL for some processing.
    // Finally when this processing completes redirect (Redirect-After-Get pattern)

    return RedirectToAction("Success");
}

4) 什么是 mvc 中的远程验证?

它是一个用属性修饰的视图模型属性,该[Remote]属性反过来在相应的输入字段上发出一些 HTML5 data-* 属性。反过来,jquery.validate.unobtrusive.js脚本将使用这些属性向相应的控制器操作发送 AJAX 请求,以在实际提交表单之前执行验证。请随时阅读相应的文档: http: //msdn.microsoft.com/en-us/library/gg508808 (v=vs.98).aspx

a) 如果我的静态函数或静态类函数很少,那么我们可以直接从视图中调用它吗?

不,当然不。这个问题没有任何意义。除了控制器操作之外,视图不知道任何服务器端特定的事情。因此,如果您想从视图中调用某个东西,那么在 ASP.NET MVC 世界中,这个东西被称为控制器动作。您当然可以使用 AJAX 或其他名称。

b)我们可以直接从视图中控制方法吗?

是的,当然,如果这个控制器方法返回一个ActionResult在这种情况下这个控制器方法有一个名称:控制器动作

c) 如何直接从视图调用任何泛型方法

绝对不可能。如果可能的话,那将是一个巨大的安全漏洞。您只能从视图中调用控制器操作。

e) 我们可以直接从视图调用任何模型方法吗?

不,看在基督的份上。我再说一遍:如果可能的话,那将是一个巨大的安全漏洞。您只能从视图中调用控制器操作。

我想使用数据注释,但我希望数据注释应该在页面中呈现不同的 js 以获取花哨的验证消息。如何使用带有数据注释的不同 jquery 验证插件......我们需要更改代码的地方。

对不起,我完全不知道你在这里问什么。ASP.NET MVC 客户端验证与jquery.validate插件紧密结合(我邀请您阅读其文档以更好地理解其功能:http: //jqueryvalidation.org/documentation/)。如果这个插件不能满足你的要求,毕竟 ASP.NET MVC 视图会吐出 HTML,所以你可以随意使用一些可能满足你特定需求的大量可用的 javascript 验证插件。

希望这能回答你的一些问题。下次您在 StackOverflow 上发布问题时,请确保它非常具体,而不是询问整个世界的哲学(就像您在此处所做的那样)。做好功课,阅读文档,如果您有具体问题,请发布您的代码,解释您遇到的困难,我们将很乐意提供帮助。

于 2013-09-16T20:07:33.140 回答