Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Html.lablefor在案例模型中显示空而不是列名。Columnname值为NULL_Asp.net Mvc_Html Helper - Fatal编程技术网

Asp.net mvc Html.lablefor在案例模型中显示空而不是列名。Columnname值为NULL

Asp.net mvc Html.lablefor在案例模型中显示空而不是列名。Columnname值为NULL,asp.net-mvc,html-helper,Asp.net Mvc,Html Helper,我试图用下面的代码在razor视图中显示模型中的值 @Html.LabelFor(m=>m.testId, Model.testId) 它显示数据库中的testId值,该值呈现为 <label for="LeadTimeText_DTD">12</label> 12 但是如果testID为空,我将在标签显示中获取列名 <label for="LeadTimeText_DTD">testId</label> testId 如果test

我试图用下面的代码在razor视图中显示模型中的值

@Html.LabelFor(m=>m.testId, Model.testId)
它显示数据库中的testId值,该值呈现为

<label for="LeadTimeText_DTD">12</label>
12
但是如果testID为空,我将在标签显示中获取列名

<label for="LeadTimeText_DTD">testId</label>
testId
如果testID为空,我不想显示下面的内容

<label for="LeadTimeText_DTD"></label>


有没有其他方法可以使用HTML helper?我做错了什么?

不要使用
@Html.LabelFor
尝试使用
@Html.DisplayFor
助手

编辑:那么我想您只需要检查Model.testId值是否为null

@if(Model.Id != null)
{
    Html.LabelFor(m=>m.testId, Model.testId)
}
else
{
    Html.LabelFor(m=>m.testId, string.Empty)
}

希望这有帮助

如果你只想要Html助手,那么你只有两个选择:1。任用
或2。为助手使用if/then条件

我创建了此扩展方法,以强制标签的值是否为空

    public static MvcHtmlString LabelForWithId<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, object htmlAttributes)
    {
        var id = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(expression));

        if (htmlAttributes != null)
        {
            var tag = new TagBuilder("label");
            tag.MergeAttributes(HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes) as IDictionary<string, object>);
            tag.Attributes.Add("for", id);
            tag.Attributes.Add("id", id);
            tag.SetInnerText(helper.DisplayFor(expression).ToString());

            return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal));
        }
        else
        {
            return MvcHtmlString.Create(string.Format("<label id=\"{0}\" for=\"{0}\">{1}</label>", id, helper.DisplayFor(expression)));
        }
    }
public static MvcHtmlString LabelForWithId(此HtmlHelper帮助程序、表达式、对象htmlAttributes)
{
var id=helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldDid(ExpressionHelper.GetExpressionText(expression));
如果(htmlAttributes!=null)
{
var标记=新标记生成器(“标签”);
tag.MergeAttributes(作为IDictionary的HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
tag.Attributes.Add(“for”,id);
tag.Attributes.Add(“id”,id);
SetInnerText(helper.DisplayFor(expression.ToString());
返回MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal));
}
其他的
{
返回MvcHtmlString.Create(string.Format({1}),id,helper.DisplayFor(expression));
}
}

使用@Html.DisplayFor可能是一个不错的选择,而使用自定义Html帮助程序可能是一个致命的选择

在MVC项目中,我们使用了很多自定义扩展方法,我经常使用的一种扩展方法如下

public static class CommonCustomExtensions
{
 public static string GetTrimValue(this string value)
        {
            // avoid the issue of string being null
            return string.IsNullOrEmpty(value) ? string.Empty : value.Trim();
        }
}
您可以按如下方式使用LabelFor html帮助程序来实现相同的结果,顺便说一句,这个扩展方法在控制器和帮助程序之间非常方便,因为它可以优雅地处理null

Html.LabelFor(m=>m.testId, Model.testId.GetTrimValue())

不,我需要标签,因为我正在使用jquery在标签和文本框之间切换。还有其他方法吗?