您可以使用扩展方法巧妙地处理此问题:
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)