Razor如何有条件地将标题属性添加到标签

时间:2013-11-11 00:33:27

标签: html asp.net-mvc asp.net-mvc-3 razor

嗨,我有这段代码:

    @{ var canUpdatePaymentStatus = !(User.GetId() == paymentDto.SubmittedByPersonId); }

<input type="checkbox" @(canUpdatePaymentStatus != true ? "title=\"Submitter can not approve\"" : string.Empty) />

我想要实现的是,如果canUpdatePaymentStatus为false,则将title属性设置为“Submitter not approve”。

无论这是不起作用,生成的标记是:

<input type="checkbox" title=""Submitter" can="" not="" approve&quot;>

所以在悬停时“显示提交者。

有谁知道我做错了什么以及如何让完整的句子出现?

3 个答案:

答案 0 :(得分:2)

我更喜欢使用内联。尝试从有条件的

中取出头衔
<input type="checkbox" title="@(canUpdatePaymentStatus != true ? "Submitter can not approve" : string.Empty)" />

答案 1 :(得分:0)

这更详细,但应该有效:

@{
    var canUpdatePaymentStatus = !(User.GetId() == paymentDto.SubmittedByPersonId);
}
@if (!canUpdatePaymentStatus) {
    <input type="checkbox" title="Submitter can not approve" />
} else {
    <input type="checkbox" />
}

答案 2 :(得分:0)

您可以使用扩展方法巧妙地处理此问题:

using System.Web.Mvc;
using System.Web.Mvc.Html;

namespace YourProjectName.Helpers
{
    public static class CheckboxExtensions
    {
        public static MvcHtmlString CheckBoxPaymentStatus(this HtmlHelper helper,
            string name, bool canUpdatePaymentStatus)
        {
            if (!canUpdatePaymentStatus)
                return helper.CheckBox(name, new { title = Status });

            return helper.CheckBox(name);
        }

        private static string Status = "Submitter can not approve";
    }
}

要使帮助程序可用于您的视图,您需要修改~/Views/Web.config(确保它是那个而不是项目根文件夹中的那个)来添加命名空间。在<system.web.webPages.razor>标记中,您将找到命名空间列表。您想要为其添加帮助程序。所以它可能看起来像这样:

<namespaces>
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Routing" />
    <add namespace="YourProjectName.Helpers" />
</namespaces>

然后在你看来:

@Html.CheckBoxPaymentStatus("PaymentStatus",
    !(User.GetId() == paymentDto.SubmittedByPersonId))

如果需要,您甚至可以修改帮助程序以将消息作为参数,以获得额外的灵活性。

但是,更好的方法是将bool属性添加到名为CanUpdatePaymentStatus的视图模型中并在控制器中设置:

public ActionResult SomeAction()
{
    YourPaymentViewModel model = // ...
    model.CanUpdatePaymentStatus = !(User.GetId() == model.SubmittedByPersonId);

    return View(model);
}

然后在视图中,您可以将事情简化为:

@Html.CheckBoxPaymentStatus("PaymentStatus", @Model.CanUpdatePaymentStatus)