首页 新闻 会员 周边

asp.net mvc的htmlHelper中有个方法DisplayNameForModel,什么作用?怎么用?

0
[已解决问题] 解决于 2015-01-02 20:07

asp.net mvc的htmlHelper中有个方法DisplayNameForModel,什么作用?怎么用?

官网地址:http://msdn.microsoft.com/zh-cn/library/system.web.mvc.html.displaynameextensions%28v=vs.108%29.aspx

模型的显示名称?怎么设置模型的显示名称?

北在北方的主页 北在北方 | 初学一级 | 园豆:180
提问于:2014-12-21 00:18
< >
分享
最佳答案
1

DisplayNameForModel只有在model定义了DisplayName时有用,简单说,DisplayNameFor是针对model里的"字段"别名,DisplayNameForModel则是针对整个model的别名.如果你model没有定义别名,那直接调用显然是没有什么效果和意义.

奖励园豆:5
hushpeak | 初学一级 |园豆:170 | 2014-12-30 22:50
1     [Table("View_Product")]
2     [DisplayName("商品")]
3     public partial class Product
4     {
5     [Key]
6     [DisplayName("商品编号")]   
7     public int ID { get; set; }
8     ...
9     }   

例子.这时,你View里或T4里就可以直接用DisplayNameForModel来显示标题"商品",而不是Product了

hushpeak | 园豆:170 (初学一级) | 2014-12-30 22:54
其他回答(2)
-1

确实是模型的显示名称。

比如,通常我们原来是这样写的

<form action="form_action.asp" method="get">
  First name: <input type="text" name="fname" />
  Last name: <input type="text" name="lname" />
  <input type="submit" value="Submit" />
</form>

这里面的"First Name"和"Last Name"就是DisplayName。

通过在Model中定义这个属性,好外是保持一致性。

所有使用到这个Model的Form,可以通过访问此属性来提供UI的显示。

 

你新建一个MVC,就可以看到这样的语句

@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>“登录”表单</legend>
        <ol>
            <li>
                @Html.LabelFor(m => m.UserName)
                @Html.TextBoxFor(m => m.UserName)
                @Html.ValidationMessageFor(m => m.UserName)
            </li>
            <li>
                @Html.LabelFor(m => m.Password)
                @Html.PasswordFor(m => m.Password)
                @Html.ValidationMessageFor(m => m.Password)
            </li>
            <li>
                @Html.CheckBoxFor(m => m.RememberMe)
                @Html.LabelFor(m => m.RememberMe, new { @class = "checkbox" })
            </li>
        </ol>
        <input type="submit" value="登录" />
    </fieldset>
    <p>
        @Html.ActionLink("注册", "Register") 如果你没有帐户。
    </p>
}

注意一下,这里面的

@Html.LabelFor(m => m.UserName)    //这个就是Label,原来的标题

@Html.TextBoxFor(m => m.UserName) //这个是TextBox,原来的输入框

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-12-21 08:33

DisplayNameForModel,……ForModel,不是LabelFor,显示属性的DisplayName可以用DisplayName()或者DisplayNameFor,可这个DisplayNameForModel的无参方法是干什么的

支持(0) 反对(0) 北在北方 | 园豆:180 (初学一级) | 2014-12-21 09:09

@北在北方: 基本是一样的.

public class Example {

[Display(Name = "Your Property Name")]

public string ExampleProperty { get; set; }

public Example() { ExampleProperty = "Example Property"; }

}

and use the following markup : 

@Html.DisplayFor(m => m.ExampleProperty)

<hr />

@Html.DisplayNameFor(m => m.ExampleProperty)

 

this will yield the following results : 

<!-- The DisplayFor() Helper rendered the actual value --> Example Property

<hr />

<!-- The DisplayNameFor() Helper rendered the Name property from the Display Attribute --> Your Property Name

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2014-12-21 09:18

@爱编程的大叔: 呃?!

<h6>DisplayNameForModel</h6>
<hr />

@Html.DisplayNameForModel()

截图:

我调用没有任何效果DisplayNameForModel

支持(0) 反对(0) 北在北方 | 园豆:180 (初学一级) | 2014-12-21 09:33

@北在北方: 

@Html.DisplayNameFor(m => m.ExampleProperty)

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2014-12-21 09:38

@爱编程的大叔: No no no. @Html.DisplayNameForModel();//无参

官网文档说明:http://msdn.microsoft.com/zh-cn/library/system.web.mvc.html.displaynameextensions.displaynameformodel%28v=vs.108%29.aspx

支持(0) 反对(0) 北在北方 | 园豆:180 (初学一级) | 2014-12-21 09:44

@北在北方: 好吧,你自己看书。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2014-12-21 09:56
0
DisplayName()
//渲染出模型属性的名称或别名,这个名称的文本将不会有任何Html包裹它
//示例:
@Html.DisplayName( "Name" ) //假设模型Person具有一个Name的属性

DisplayNameFor( )
//是DisplayName方法的翻版,具有一样的行为

DisplayNameForModel( )
//渲染出视图所绑定的模型的名称或别名,这个名称的文本将不会有任何Html包裹它
//示例:
Html.DisplayNameForModel() //假设视图绑定了一个模型

Display( )
//渲染出模型属性的值,值包含在div中
//如果模型的属性是一个bool值则渲染出出一个处于禁用状态的复选框,复选框是否选中则取决于bool值是true或者false
//示例:
@{
    public class Person
    {
        public string Name { getset; }
        public bool IsEmployee { getset; }
    }

    public class MessageController : Controller
    {
        public ActionResult Test( )
        {
            Person p = new Person( );
            p.Name = "sam";
            p.IsEmployee = true;
            return View( p );
        }
    }
}
@Html.Display( "Name" ) //将渲染出:<div>sam</div>
@Html.Display( "IsEmployee" ) //将渲染出:<input type="checkbox" checked="checked" disabled="disabled" name="IsEmployee" id="IsEmployee" />

DisplayFor( )
//是Display方法的翻版,具有一样的行为

DisplayForModel( )
//渲染出模型的所有属性的名称或别名和属性的值,属性名称包含在div中,属性的值包含在另一个div中
//如果模型的属性是一个bool值,则该属性的名称包含在div中,,再渲染出一个处于禁用状态的复选框,复选框是否选中则取决于bool值是true或者false
//示例:
@Html.DisplayForModel()

//或:
@{
    public class Person
    {
        [DisplayName"姓名" )]
        public string Name { getset; }
        [DisplayName"是否是员工" )]
        public bool IsEmployee { getset; }
    }
}
@Html.DisplayForModel()


Editor( )
//渲染出模型属性的输入框,以便设置属性的值

EditorFor( )
//是Editor方法的翻版,具有一样的行为

EditorForModel( )
//渲染出模型所有属性的输入框,以便用户可编辑属性的值

//总结一下:以Display开头的方法都是只读数据,DisplayName获取名称,Display获取值,DisplayForModel同时获取名称和值
//总结一下:以Editor开头的方法都是可读写的数据,Editor编辑属性的值,EditorForModel编辑模型所有属性的值

 一句话:微软真能折腾!

寒食 | 园豆:98 (初学一级) | 2018-02-02 15:45

感谢!!!

支持(0) 反对(0) 痴者工良 | 园豆:200 (初学一级) | 2019-04-08 16:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册