【问题标题】:How to set MVC binding correctly如何正确设置 MVC 绑定
【发布时间】:2021-12-07 16:01:29
【问题描述】:

有一个controller

[Route("Socket")]
public class SocketController : Controller
{
    [Route("New")]
    public ActionResult NewSocketForm()
    {
        ViewBag.ChargeTypes = new List<SelectListItem>()
        {
            new SelectListItem("bla", "0"),
            new SelectListItem("bla2", "1")
        };
        var model = new Model();
        return View(model);
    }
}

有一个View

@model blabla.Model

<div class="soket-item">
    <div class="form-group">
        <label asp-for="ChargeType" class="control-label"></label>
        <select asp-for="ChargeType" class="form-control" asp-items="ViewBag.ChargeTypes" />
        <span asp-validation-for="ChargeType" class="text-danger"></span>
    </div>
</div>

还有一个Model:

public class Model
{
    [Required]
    [Range(0, 5)]
    [Display(Name = "Charge Type")]
    public int ChargeType { get; set; }
}

我有两个问题:

  • asp-items 不会从 ViewBag 加载列表
  • label 不会从 Model 加载显示名称 为什么?

【问题讨论】:

  • 标签助手似乎没有执行。您是否有包含 @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers (docs) 的 _ViewImports.cshtml 文件?
  • @KirkLarkin 是的,我有Pages\\_ViewImports.cshtml,但我的视图位于Views 目录中。
  • 你还有一个 Views\_ViewImports.cshtml 文件吗? Pages 版本不适用于 Views 文件夹。
  • @KirkLarkin 不,我不知道i.stack.imgur.com/88izq.png
  • 这种情况下,自己添加。确保它有我上面显示的@addTagHelper 行。

标签: asp.net asp.net-mvc asp.net-core


【解决方案1】:

第一次在模型中为 asp-items 定义一个属性:

  public class Model
    {
        public List<SelectListItem> ListChargeType{ get; set; }
    }

然后在控制器中填写这个属性:

 [Route("New")]
    public ActionResult NewSocketForm()
    {
        
        var model = new Model();
        List<SelectListItem> lstChargeTypes= new  List<SelectListItem>();
        lstChargeTypes.Add( new SelectListItem {Value= "0", Text = "bla" });
        lstChargeTypes.Add( new SelectListItem {Value= "1", Text = "bla2" });

        var model = new Model();
        model.ListChargeType= lstChargeTypes;
        return View(model);
    }

然后在视图中:

@model blabla.Model

<div class="soket-item">
    <div class="form-group">
        <label asp-for="ChargeType" class="control-label">@ChargeType</label>
        <select asp-for="ChargeType" class="form-control" asp-items="ListChargeType" />
        <span asp-validation-for="ChargeType" class="text-danger"></span>
    </div>
</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多