1

嗨,我有这段代码:

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

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

我想要实现的是,如果 canUpdatePaymentStatus 为假,则将标题属性设置为“提交者无法批准”。

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

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

如此悬停“显示提交者。

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

4

3 回答 3

3

我更喜欢使用内联。尝试从条件中取出标题

<input type="checkbox" title="@(canUpdatePaymentStatus != true ? "Submitter can not approve" : string.Empty)" />
于 2013-11-11T00:59:47.163 回答
0

这更冗长但应该有效:

@{
    var canUpdatePaymentStatus = !(User.GetId() == paymentDto.SubmittedByPersonId);
}
@if (!canUpdatePaymentStatus) {
    <input type="checkbox" title="Submitter can not approve" />
} else {
    <input type="checkbox" />
}
于 2013-11-11T00:53:24.483 回答
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)
于 2013-11-11T01:26:13.327 回答