错误:编译错误

说明:编译服务于此请求所需的资源期间发生错误。请查看以下特定的错误详细信息,并适当地修改您的源代码。

编译器错误消息:CS1928:'System.Web.Mvc.HtmlHelper'不包含'Label'的定义,并且最佳扩展方法重载'System.Web.Mvc.Html.LabelExtensions.Label(System.Web.Mvc.HtmlHelper ,string,string)'包含一些无效的参数

源错误:

第11行:@ Html.Label(“电子邮件”,新的{style =“ width:200px”})

我在做什么:自从我是初学者以来,就将CSS和样式应用于MVC中的RAZOR。

@using (Html.BeginForm("register","Home", FormMethod.Post, new {id="submitForm"}))
{

   <div style="Width:200px">
    <i>@Html.Label("Name:", new { style = "width:200px;" })</i>
       @Html.TextBox("txtboxName")
   </div>
   <br />
   <div style="Width:200px">
    <i>@Html.Label("Email:")</i>
       @Html.TextBox("txtboxEmail")
   </div>
   <br />
   <div style="Width:200px">
    <i>@Html.Label("Password:")</i>
       @Html.Password("txtboxPassword")
   </div>
   <br />
   <div>
    <button type="submit" id="btnSubmit" name="Command" value="Submit">Submit</button>
   </div>


}

最佳答案

Html.Label的第一个参数实际上是一个字符串形式的表达式。它与不带强类型表达式的LabelFor本质上相同。

这些表达式告诉ASP.Net在哪里寻找元数据。但是在您的情况下,您只想输出一个文字字符串。

因此,您可以简单地说:

<label style="width:200px;">Name:</label>


如果您确实想从属性元数据派生值(通常是个好主意),则可以构建如下所示的视图模型:

// view model
public sealed class MyViewModel
{
    [DisplayName( "An Email Address" )]
    public string Email
    {
        get;
        set;
    }
}

// in your Razor view

@Html.LabelFor( o => o.Email, new { style = "width: 200px" } )
@Html.TextBoxFor( o => o.Email )


请注意,使用上述视图模型,您现在可以使用Label方法。第一个参数对应于视图模型中属性的名称。

@Html.Label( "Email", new { style = "width: 200px" } )


由于这依赖于字符串,因此它比上一个示例更脆弱,但是它回答了有关正确使用重载的原始问题。



出于好奇,我浏览了MVC源代码,以了解如何处理标签表达式。 Label的第一个字符串参数绝对旨在用作表达式(而不是文字),但是如果无法派生表达式,则框架会将其视为字符串。

换句话说,在某些情况下,您的代码可以实际运行,但这是内部行为,可能会更改,因此不应依赖。

但是,您收到错误的事实可能表明代码中其他地方存在另一个问题。

关于css - 标签在RAZOR中无效重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20852272/

10-13 06:52