【问题标题】:Get dataTextField from SelectList in ASP.NET Core MVC从 ASP.NET Core MVC 中的 SelectList 获取 dataTextField
【发布时间】:2020-07-13 19:50:04
【问题描述】:

我有一个使用 SelectList 填充数据的下拉列表。我正在将下拉列表中的数据传递到我的第二页(NewPage)。我的目标是从 Controller 中的 SelectList 中获取第三个参数(FirstName)。

查看

<select name="dropdown1" asp-items="@(new SelectList(ViewBag.message, "ID", "FirstName"))"></select>

控制器:

        [HttpGet("[action]")]
        public IActionResult NewPage(string dropdown1)
        {
            string firstName = Request.Form["dropdown1"];
            int intID = Convert.ToInt32(dropdown1);
            List<PersonModel> data = new List<PersonModel>()
            {
                new PersonModel()
                {
                    ID = intID,
                    FirstName = firstName
                }
            };
            TempData["Data"] = System.Text.Json.JsonSerializer.Serialize(data);
            return RedirectToAction("NewPage", "NewPage");
        }

我的控制器中的字符串变量 firstName 为空。我收到内容类型无效的错误。我通常使用 Request.Form[""] 从字段中获取文本,但在这种情况下它似乎不起作用,因为这是一个选择而不是输入框。关于如何从我的选择框/SelectList 的第三个参数中获取文本的任何建议?感谢您的宝贵时间!

【问题讨论】:

    标签: asp.net-core model-view-controller dropdown http-get selectlist


    【解决方案1】:

    你有几个选择

    如果您正在执行 POST,则将 select NAME 属性设置为 name='dropdown1' 它应该绑定所选值。

    如果您的视图模型具有相同名称的属性,您可以使用 asp-for。这是一个选择控件,我用它来回发数据聚合方式的更改。请注意,日期从/到控件将使用它们的 asp-for 属性值绑定

    <select class="form-control" asp-for="Aggregation"
            asp-area="Management"
            asp-controller="Visits"
            asp-action="Index"
            asp-route-sortcolumn="@Model.SortColumn"
            asp-route-sortorder="@(Model.SortDirection)"
            onchange="$('form').submit();">
    
    
        [HttpPost]
        public async Task<IActionResult> Index(string aggregation, DateTime dateFrom, DateTime dateTo, string sortColumn = "VisitDate", SortOrder sortOrder = SortOrder.Descending)
        {
            return View(await GetSiteVisitsViewModel(aggregation, dateFrom, dateTo, sortColumn, sortOrder));
        }
    

    【讨论】:

      【解决方案2】:

      我收到内容类型无效的错误。

      你有这个问题是因为action是Get请求,传递的参数是查询字符串的形式,所以

      string firstName = Request.Form["dropdown1"];
      

      应该改为

      string firstName =Request.Query["FirstName"]; 
      

      然后用ajax在View中获取ID和firstName,下面是我的demo,希望对你有帮助:

      控制器:

      public IActionResult DropList()
              {
                  ViewBag.message = new List<PersonModel>()
                  {
                      new PersonModel(){ ID=1,FirstName="AA"},
                      new PersonModel(){ ID=2,FirstName="BB"},
                      new PersonModel(){ ID=3,FirstName="CC"},
                  };
                      return View();
              }
      
      
              [HttpGet("[action]")]
              public IActionResult NewPage(string dropdown1)
              {
                  string firstName =Request.Query["FirstName"];
                  int intID = Convert.ToInt32(dropdown1);
                  List<PersonModel> data = new List<PersonModel>()
                  {
                      new PersonModel()
                      {
                          ID = intID,
                          FirstName = firstName
                      }
                  };
                  TempData["Data"] = System.Text.Json.JsonSerializer.Serialize(data);
                  return RedirectToAction("NewPage", "NewPage");
              }
      

      型号:

      public class PersonModel
          {
              public int ID { get; set; }
              public string FirstName { get; set; }
          }
      

      查看:

      <form asp-action="NewPage" method="get">
         <select name="dropdown1" asp-items="@(new SelectList(ViewBag.message, "ID", "FirstName"))"></select>
          <input id="Submit1" type="submit" value="submit" />
      </form>
      
      @section Scripts{
          <script>
              $(document).ready(function () {
                  $("form").submit(function () {
                      event.preventDefault();
                      var text = $("select[name=dropdown1] option:selected").text();
                      var val = $("select[name=dropdown1] option:selected").val();
      
                      $.ajax({
                          type: 'Get',
                          url: '/NewPage?dropdown1=' + val + "&firstName=" + text,
                      });
                  })
              });
      
          </script>
      }
      

      结果:

      【讨论】:

        猜你喜欢
        • 2014-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多