簡體   English   中英

ASP.NET 核心 MVC<select><option>返回空值

[英]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.

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