【问题标题】:Create DropDownList in view and pass value to controller - MVC在视图中创建 DropDownList 并将值传递给控制器​​ - MVC
【发布时间】:2016-09-29 14:41:00
【问题描述】:

如何在视图中创建一个值为 1-10(int) 的 DropDownList 并将选定的值传递给控制器​​?

UserReview 模型:

    public System.Guid Id { get; set; }
    public System.Guid UserId { get; set; }
    public System.Guid ReviewId { get; set; }
    public Nullable<int> Rating { get; set; }

控制器:

        public ActionResult Rating(Guid id) //got its ReviewId from previous page
        {
            //so far empty, no clue what to do    

            return Content("");
        }

【问题讨论】:

  • 要创建 SelectList,您可以使用 var options = new SelectList(IEnumerable.Range(1, 10)); 并将其传递给视图。您需要展示您的模型和控制器方法(您尝试过什么)
  • @StephenMuecke 我用模型更新了问题。我尝试添加您的var options =..,但无法解析Range 符号。
  • 您的模型需要绑定到(所选值)的属性,例如 int SelectedRatingSelectList 的属性,例如 IEnumerable&lt;SelectListItem&gt; RatingList,并且您根据我的第一条评论中的代码。然后在视图中它只是@Html.DropDownListFor(m =&gt; m.SelectedRating, Model.RatingList)
  • 糟糕,抱歉,这是Enumerable.Range()(不是IEnumerable.Range()
  • @StephenMuecke 你介意用我的代码演示一下吗?我尝试了您的解决方案但失败了。我会更新我尝试的更改。

标签: c# asp.net-mvc


【解决方案1】:

1)第一种方法 在视图中

<select name="YourDropDownValue">
 @for(int i = 1 ; i <= 10 ; i++) 
     {
  <option value="@i">@i</option>
     }
</select>

尝试使用此代码,在 name 属性中,您必须保留要在控制器中传递的字段名称

在控制器中,这是绑定下拉值的方式

   [HttpPost]
  public ActionResult getDropDown(int YourDropDownValue)
  {


  }

2)第二种方法 将其保存在控制器中获取

  List<int> Num = new List<int>() { 1,2,3,4,5,6,7,8,9,10 };
  ViewBag.Number = new SelectList(Num);

现在可见

      @Html.DropDownListFor(x => x.YourDropDownValue, ViewBag.Number as SelectList)

如果你没有模型

      @Html.DropDownList("YourDropDownValue", ViewBag.Number as SelectList)

现在在控制器中

   [HttpPost]
  public ActionResult getDropDown(int YourDropDownValue)
  {


  }

【讨论】:

  • “MVC”的做法是在模型而不是视图中创建集合。
  • hmm.. 这太尴尬了,我知道你的解决方案很棒,但我在 MVC 方面太糟糕了,我无法让它工作(4 天前开始)。使用第一种方法,我可以看到下拉列表。但我不知道如何将所选值发送到方法getDropDown(int YourDropDownValue)。我还尝试通过返回Content(YourDropDownValue.ToString()); 来显示所选值。方法 2 超出了我的范围。
  • 这个解决方案不是很好。这是不好的做法,甚至没有提供正确的 2-way 模型绑定。
  • @skylake List&lt;int&gt; Num = new List&lt;int&gt;() { 1,2,3,4,5,6,7,8,9,10 }; 我保存在控制器中的也可以保存在模型存储库类中,然后在控制器中调用该方法在存储库类中创建一个方法public list&lt;int&gt; NumbersList() { List&lt;int&gt; Num = new List&lt;int&gt;() { 1,2,3,4,5,6,7,8,9,10 }; return Num; } 然后在控制器中直接调用这个函数,首先创建函数存在的类的实例,例如存储库,然后调用它ViewBag.Number = new SelectList(repository.NumbersList);其余保持不变。
猜你喜欢
  • 1970-01-01
  • 2019-03-30
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多