簡體   English   中英

如何在條件下使用html helper和在asp.net mvc中使用自定義displayview創建只讀?

[英]How to create a readonly on the condition using html helper and using custom displayview in asp.net mvc?

1.例如,我有下一個助手,我需要將狀態設置為只讀(或禁用)

@Html.TextBoxFor(model => model.RequestTypeAdditional, new { @class = "form-control",   @autocomplete = "off" , **readonly = IsReadOnly(Model.IsClosed)**  })

@functions
{
    private static string IsReadOnly( bool isClosed)
    {
        if (RoleHelpers.IsInRoles("Master"))
            return "readonly";
        else if (RoleHelpers.IsInRoles("Operator") && (!isClosed))
            return string.Empty;
        else if (RoleHelpers.IsInRoles("Operator") && (isClosed))
            return "readonly";
        else if (RoleHelpers.IsInRoles("Administrator"))
            return string.Empty;
        else
            return "readonly";
    }
}

2.我有模型的自定義視圖:-

@Html.DisplayFor(model => model.RequestType, new { **@readonly = IsReadOnly(Model.IsClosed)** })

僅在顯式指定(或未指定)只讀(或禁用)的情況下有效。 定制助手不適合

您為什么不能這樣做:

@if (IsReadOnly(Model.IsClosed))
{ 
@Html.TextBoxFor(model => model.RequestType, new { @readonly = "readonly" }) 
}
else 
{ 
@Html.TextBoxFor(model => model.RequestType) 
}

不要嘗試蠻力。 我同意您不希望您的表單代碼因多個重復塊而blo腫。

我建議將上面的Sergey Shabanov建議的代碼放入顯示模板中。 然后在我們的模型中使用UIHint鏈接到顯示模板。 Presto,代碼完整,表單代碼沒有膨脹。 您可以保留DisplayFor ,通常它可以解析為一行UI代碼。 最后,您將實現保留在一個位置,因此更改它不容易出錯。

我也認為這可能是實現強類型TextBox自定義幫助程序的最佳方法之一:

public static MvcHtmlString TextBoxFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>>expression, bool isReadonly, bool isAutocomplete)
{
    MvcHtmlString html = default(MvcHtmlString);
    if (isReadonly)
    {
        html = System.Web.Mvc.Html.InputExtensions.TextBoxFor(htmlHelper, expression, new { @class = "readOnly form-control", @autocomplete = isAutocomplete ? "on" : "off", @readonly = "read-only" });
    }
    else
    {
        html = System.Web.Mvc.Html.InputExtensions.TextBoxFor(htmlHelper, expression, new { @class = "readOnly form-control", @autocomplete = isAutocomplete ? "on" : "off" });
    }

    return html;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM