0

時間後。後でインターネット。あと毛抜き。

Prs_Role_ID_Deleted は int です。

私の Details.cshtml では、model.Prs_Role_ID_Deleted = 0 (ゼロ) の値の場合、"" (空の文字列) を出力するようにしています。

問題は、 model => model.Prs_Role_ID_Deleted の値を取得できないことです。プロパティ名を取得できます。model.Prs_Role_ID_Deleted を取得できます。

22 に等しいはずの model.Prs_Role_ID_Deleted の値を取得できません。

@Html.ZZZ(model => model.Prs_Role_ID_Deleted)


public static MvcHtmlString ZZZ<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression)
{
    var id = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(expression));
    return "whatever";
}

値を確認することは不可能だと思い始めています。


ありがとうSLaks。それが解決策でした。

他の開発者向けの投稿ソリューション。

AFTER SLakのアドバイス

@Html.DisplayForWithID_ZeroIsBlank(model => model.Prs_Role_ID_Deleted, "span")
<dd><span id="Prs_Role_ID_Deleted"></span></dd>

public static MvcHtmlString DisplayForWithID_ZeroIsBlank<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string wrapperTag = "span")
{
    var id = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(expression));
    TModel model = (TModel)helper.ViewContext.ViewData.ModelMetadata.Model;
    var ctlValue = expression.Compile()(helper.ViewData.Model);
    string OutputValue = "Silly developer. This only works for int.";
    Type type = ctlValue.GetType();
    if (type.Equals(typeof(int)))
    {
        string s = ctlValue.ToString().Trim();
        if (ctlValue == null || ctlValue.ToString().Trim() == "0")
        {
            OutputValue = "";
        }
        else
        {
            OutputValue = ctlValue.ToString();
        }
    }
    return MvcHtmlString.Create(string.Format("<{0} id=\"{1}\">{2}</{0}>", wrapperTag, id, OutputValue, helper.DisplayFor(expression)));
}
4

1 に答える 1

3

式をデリゲートにコンパイルしてから、モデルで呼び出す必要があります。

expression.Compile()(helper.ViewData.Model);
于 2016-11-01T16:36:45.767 に答える