2016-03-28 119 views
2

HTML辅助参数,我看到很多代码是这样的:在C#剃刀(ASP.NET MVC)

@Html.LabelFor(x => x.username) 
@Html.TextBoxFor(x => x.password) 

这些仅仅是例子。任何人都可以请向我解释那x => x.username部分是什么意思?我仍然在我的asp.net c#mvc应用程序中使用这样的html标签<input type="text">,因为我没有得到@Html.TextBox样式的挂起。

还有new参数是这样的:

@Html.TextBoxFor(x => x.username, new {placeholder = @Html.DisplayNameFor(x => x.username}) 

我不明白这一切意味着什么。任何人都可以解释一下吗?

在此先感谢。

回答

0

x => x.username是一个lambda表达式。您应该阅读更多关于匿名方法和委托。但那些强类型的html helper接受一个名为Func<in T, out TResult>的通用委托(不记得确切的签名),它代表了一个函数,它需要一个T并返回一个TResultT是你的@Model

@Html.TextBoxFor(x => x.UserName) = <input type="text" name="UserName" id="UserName"/>

@Html.TextBox("UserName")与上述相同。但是那条红色的绳子很糟糕。

尽量保持您的视图的强类型,以便您可以重命名属性,而不用担心所有必须手动更新的视图。

new {placeholder = @Html.DisplayNameFor(x => x.username}anonymous type。仔细看看intellisense,看看方法接受什么类型的东西。在这种情况下,一个object。哪一个anonymous type是。

1

你的大部分问题都可以通过研究来解决。看来你无法确定,如何找到你的问题的答案。这可以帮助你现在和将来确定如何找到这样的大多数问题的答案。

任何人都可以请向我解释那是什么x => x.username部分是什么意思?

那么让我们做一些研究。第一步是,方法签名是什么样的。为LabelFor谷歌和我们的第一个链接一个简单的搜索发现..

https://msdn.microsoft.com/en-us/library/system.web.mvc.html.labelextensions.labelfor(v=vs.118).aspx

了一堆的签名,我会选择第一个,因为它的第一个代码示例匹配..

@Html.LabelFor(x => x.username) 

匹配:

public static MvcHtmlString LabelFor<TModel, TValue>(
    this HtmlHelper<TModel> html, 
    Expression<Func<TModel, TValue>> expression 
) 

我看到的第一个参数开始于这一点,这表示Extension Method这超出第你原来的问题的范围,所以我会忽略它。第二个参数是Expression<Func<TModel, TValue>> expression。谷歌搜索Expression Func得到不少有用的结果..

What does this mean: Expression<Func<TModel, TValue>>

或者更具体地说:

Expression<TDelegate>

等等等等,希望现在你有工具做了研究。

建议阅读:C# Delegates, Anonymous Methods, and Lambda Expressions – O My!