拡張メソッドを使用すると、これをうまく処理できます。
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)