![](/img/trans.png)
[英]ASP.NET Core - How to get the input ID from asp-for tag helper in another custom tag helper
[英]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
但它不起作用。 submit
后Controller
的值為零。
以下輸入中的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)
{}
在這里,公司模型需要StatusId
、 Status
等字段。
但是,服務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.