簡體   English   中英

帶有 .NET Core 的 Material Design Lite 中的 Asp-for 標簽助手

[英]Asp-for tag helper in Material Design Lite with .NET Core

我正在嘗試獲取列表中所選項目的StatusId

我有一個使用 Material Design Lite 創建的狀態列表:

<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label getmdl-select getmdl-select__fix-height">
    <input type="text" value="" class="mdl-textfield__input" id="statusList" asp-for="Status" readonly>
    <input type="hidden" value="" name="statusList" asp-for="StatusId">
    <i class="mdl-icon-toggle__label material-icons">keyboard_arrow_down</i>
    <label for="statusList" class="mdl-textfield__label">Status</label>
    <ul for="statusList" class="mdl-menu mdl-menu--bottom-left mdl-js-menu">
        @foreach (var status in ViewBag.Status)
        {
            <li class="mdl-menu__item" data-val="@status.Id">@status.Name</li>
        }
    </ul>
</div>

我在這里設置了StatusId

<li class="mdl-menu__item" data-val="@status.Id">@status.Name</li>

我注意到當我在列表中選擇一個項目時StatusId轉到此input

<input type="hidden" value="" name="statusList" asp-for="StatusId">

在此處輸入圖片說明

我在其中添加了asp-for但它不起作用。 submitController的值為零。

以下輸入中的asp-for="Status"工作完美,並且與Controller的綁定完美發生:

<input type="text" value="" class="mdl-textfield__input" id="statusList" asp-for="Status" readonly>

Controller方法:

public async Task<IActionResult> Create([Bind("StatusId,CNPJ,Name,BusinessName,State,City,Street,District,CEP,Observation,Phone,Cellphone,Email,Status")] Company company)
{}

CompanyStatus模型:

public class CompanyStatus
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Company型號:

public class Company
{
    public int Id { get; set; }
    public int StatusId { get; set; }
    public string CNPJ { get; set; }
    public string Name { get; set; }
    public string BusinessName { get; set; }
    public string State { get; set; }
    public string City { get; set; }
    public string Street { get; set; }
    public string District { get; set; }
    public string CEP { get; set; }
    public string Observation { get; set; }
    public string Phone { get; set; }
    public string Cellphone { get; set; }
    public string Email { get; set; }
    public string Status { get; set; }
}

任何想法我做錯了什么?

讓我們回顧一下您在服務器上的操作方法:

public async Task<IActionResult> Create([Bind("StatusId,CNPJ,Name,BusinessName,State,City,Street,District,CEP,Observation,Phone,Cellphone,Email,Status")] Company company)
{}

在這里,公司模型需要StatusIdStatus等字段。

但是,服務input TagHelper

<input type="text" value="" class="mdl-textfield__input" id="statusList" asp-for="Status" readonly>
<input type="hidden" value="" name="statusList" asp-for="StatusId">

將在瀏覽器中呈現為如下所示的 html 標簽:

<input type="text" value="" class="mdl-textfield__input" id="statusList" readonly="" name="Status">
<input type="hidden" value="" name="statusList" data-val="true" data-val-required="The StatusId field is required." id="StatusId">

請注意,在 browser 中呈現時,隱藏的<input>元素的name屬性是statusList而不是statusId

其原因是,你的name將財產input在服務器端TagHelper覆蓋name由屬性生成的屬性asp-for財產。

因此,您發送到服務器的有效負載將是:

Status=your-status-name&statusList=1&__RequestVerificationToken=xxx

由於服務器不關心statusList字段,它會簡單地忽略它。

當用戶選擇<ul>/<li>時,我不確定您的 Material Design Lite 和客戶端腳本如何將值綁定到input#statusId 但是如果你想通過 form 發送請求,你應該改變你的視圖代碼:

<input type="hidden" value="" name="statusList" asp-for="StatusId">

成為 :

<input type="hidden" value="" asp-for="StatusId">

暫無
暫無

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

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