[英]ASP.Net Core MVC <select> <option> returns null
處理 ASP.NET Core MVC 應用程序。 我有一個帶有@model List<CatalogItem>
的<select><option>
@model List<CatalogItem>
用於我的 Razor 視圖。 我想用CatalogItem
項中的值填充表單CartForm
。 當用戶選擇一個項目並將其發送回操作方法asp-action="CartForm"
,所選項目返回為 null。
我錯過了什么?
<select id="itmSelect" name="itmSelect">
foreach (CatalogItem itm in Model)
{
<option class="text-dark" value="@itm">@itm.Description</option>
}
</select>
雖然這並不能解釋null
值:
<option>
的value
必須是字符串,或者至少是簡單類型。
你的@itm
是一個復雜的類型。
您應該將其更改為:
<option class="text-dark" value="@itm.ID">
通過更改此設置,您至少可以發布正確的選定值,這可能會更好地反映您的發送模型。
正如@Stefan 所說,@itm 是一種復雜類型,我們無法將其直接在選擇選項值中傳遞給控制器。
如果您仍然想根據選擇選項傳遞項目,我建議您可以嘗試使用 CatalogItem 屬性為選擇選項設置一些自定義屬性,並在視圖上添加隱藏字段,隱藏輸入的名稱是 CatalogItem 屬性名稱。
然后您可以使用 jquery 根據下拉列表選擇選項設置輸入隱藏的值。
asp.net核心模型綁定會根據formdata的名稱綁定模型,所以綁定得很好。
更多細節,你可以參考下面的例子。
目錄項型號:
public class CatalogItem
{
public int Id { get; set; }
public string Description { get; set; }
public string Name { get; set; }
}
看法:
<form asp-action="DropdownGetValue" id="test1">
<select id="itmSelect" name="Id">
@foreach (var itm in Model)
{
<option class="text-dark" value="@itm.Id" Description="@itm.Description" Name="@itm.Name">@itm.Description</option>
}
</select>
<input type="hidden" name="Description" id="Description" />
<input type="hidden" name="Name" id="Name" />
<input type="submit" value="Click" />
</form>
jQuery 腳本:
<script type="text/javascript">
$(function () {
$("#itmSelect").change(function () {
$("#Description").val($('#itmSelect').find(":selected").attr("Description"));
$("#Name").val($('#itmSelect').find(":selected").attr("Name"));
});
})
</script>
控制器:
[HttpPost]
public IActionResult DropdownGetValue(CatalogItem itmSelect)
{
//_db.Category.Add(ca);
//_db.SaveChanges();
int i = 0;
return Ok();
}
結果:
我在使用 null 值時遇到的問題是因為我沒有在 post-back 方法中命名參數以匹配標簽的名稱。 一旦我把它對齊,一切都奏效了。
感謝所有提供時間和評論的人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.