簡體   English   中英

將 Razor 字段對象引用到因子 C# (MS-MVC 5)

[英]Referencing Razor field objects to factor C# (MS-MVC 5)

我試圖將 Razor 代碼 (.cshtml) 中的字段引用分解到一個位置,以便更容易更改和復制。 但它不起作用。 它認為“fieldRef”object 是字段本身,因此 label 讀取 output 上的“fieldRef”。

@{object fieldRef = null; }  

<div class="col-md-4">
    @{ fieldRef = Model.ExcludeWords;}

    @Html.LabelFor(Model => fieldRef, htmlAttributes:
        new { @class = "control-label", @style = "color:#004400" })

    @Html.EditorFor(Model => fieldRef,
        new
        {
            htmlAttributes = new
            {
                @class = "form-control"
            }
        })

    @Html.ValidationMessageFor(Model => fieldRef, "", new { @class = "text-danger" })
</div>
@* More fields to follow this pattern... *@

請注意,“fieldRef”被引用了 3 次。 這個問題不是一個問題,但如果我能讓參考有效,我就可以簡化大量的編碼任務。

在 ASP.NET Core Razor Pages 中,我替換了以下內容:

<dl class="row">
    <dt class="col-sm-2">
        @Html.DisplayNameFor(model => model.Course.Title)
    </dt>
    <dd class="col-sm-10">
        @Html.DisplayFor(model => model.Course.Title)
    </dd>
    <dt class="col-sm-2">
        @Html.DisplayNameFor(model => model.Course.Credits)
    </dt>
    <dd class="col-sm-10">
        @Html.DisplayFor(model => model.Course.Credits)
    </dd>
    <dt class="col-sm-2">
        @Html.DisplayNameFor(model => model.Course.Department)
    </dt>
    <dd class="col-sm-10">
        @Html.DisplayFor(model => model.Course.Department.DepartmentID)
    </dd>
</dl>

和:

<dl class="row">
    @{ 
        await Template1(model => model.Course.CourseID);
        await Template1(model => model.Course.Title);
        await Template1(model => model.Course.CourseID);
        await Template2(model => model.Course.Department, model => model.Course.Department.DepartmentID);
    }
</dl>

其中Template1Template2在文件頂部定義:

@{ 
    async Task Template1<T>(Expression<Func<DeleteModel, T>> expr)
    {
            <dt class="col-sm-2">
                @Html.DisplayNameFor(expr)
            </dt>

            <dd class="col-sm-10">
                @Html.DisplayFor(expr)
            </dd>
    }

    async Task Template2<T1, T2>(Expression<Func<DeleteModel, T1>> expr_a, Expression<Func<DeleteModel, T2>> expr_b)
    {
            <dt class="col-sm-2">
                @Html.DisplayNameFor(expr_a)
            </dt>

            <dd class="col-sm-10">
                @Html.DisplayFor(expr_b)
            </dd>
    }

}

將此作為傳遞表達式的示例提及,這似乎是您的目標。

暫無
暫無

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

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