【问题标题】:How do you get a selected item on post from a select list with only text item in asp.net core mvc?如何从只有 asp.net core mvc 中的文本项的选择列表中获取选定的项目?
【发布时间】:2021-08-10 10:00:22
【问题描述】:

如何从只有 asp.net core mvc 中的文本项的选择列表中获取选定项值或帖子上的文本?

模型有一个字符串属性,ChosenText。

目前,ChosenText 在 post action 方法中总是返回为 null。

标记:

<form asp-action="MakeChange" method="post" id="mainform">
  <select name="cars" id="cars" asp-for="ChosenText">
        <option value="volvo">Volvo</option>
        <option value="saab">Saab</option>
        <option value="mercedes">Mercedes</option>
        <option value="audi">Audi</option>
    </select>
   <button type="submit">Submit</button>
</form>

动作方法:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public IActionResult MakeChange(TestModel model)
    {
        if (model.ChosenText.ToUpper() == "VOLVO")
        {

        }

        return View(model);
    }

【问题讨论】:

  • 你也可以发布你的模型吗?

标签: c# razor asp.net-core-mvc model-binding selectlist


【解决方案1】:

目前,ChosenText 在 post action 方法中总是返回为 null。

请注意,asp-for="ChosenText" 将帮助为渲染的 html 自动生成 name 和 id 属性 &lt;select&gt; 标记。

在您的代码中,我们可以发现您还为 Select Tag Helper 明确指定了 name="cars" 和 id="cars"。为了使您发布的数据可以按预期绑定到模型属性,请检查您的模型类和属性是否定义如下。

public class TestModel
{
    [BindProperty(Name = "cars")]
    public string ChosenText { get; set; }

    //...
    //other properties
    //...

此外,为了解决类似问题,您可以使用发布的数据检查实际请求,并将发布的数据与您的模型属性进行比较。

【讨论】:

  • 谢谢。这很有帮助。
【解决方案2】:

您必须将模型和 @Html.AntiForgeryToken() 添加到您的视图中,并从 select 中删除 id 和 names 属性,因为您使用的是 asp-for 和表单提交

@model TestModel 

<form asp-action="MakeChange" method="post" >
@Html.AntiForgeryToken()

<select asp-for="ChosenText">
  .....
  
</form>

恕我直言,因为您使用的是模型,所以创建模型也是一个好主意

    [HttpGet]
     public IActionResult Get()
    {
      var model= new TestModel();
        return View("viewName", model);
    }

【讨论】:

  • 谢谢,但(很遗憾)没有帮助。
猜你喜欢
  • 2016-08-05
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多