从值填充下拉列表

时间:2014-08-07 00:19:06

标签: c# asp.net-mvc asp.net-mvc-4

我有一个包含3个值的下拉列表:

  • 未指定

基本上在我看来,当我选择男性,女性或未指定时,我想要更改我在另一个组合框中的数据,例如男性用户,女性用户和没有给予性别的用户。

List<User> users = new List<User>();

foreach (User user in ctspc.db.AllUsers.ToList())
{
    users.Add(DAL.Getusers(user.UserId));
}

所以在这里我得到了所有用户,我的问题是我需要使用LINQ来解决我需要搜索哪种类型的性别,我能处理的那一点,我遇到的问题是我无法检索到下拉列表值。

我试过了:

var x = Request.Params["cboGender"];

但是我假设因为页面尚未加载,它无法获得当前值,所以基本上我要做的就是根据当时的列表框,我希望它能够调用我的Create方法并继续获取所选值并更新新列表框。

这里我有cshtml代码

<select name="cboGender">
    @foreach (var Gender in ViewBag.Genders)
    {
        <option value="@Gender.GenderId">@Gender.Name</option>
    }
</select>

<select name="cboUser">
    @foreach (var User in ViewBag.UsersByGender)
    {
        <option value="@User.UserId">@User.Username</option>
    }
</select>

任何有关我如何做到这一点的帮助都会很棒。

3 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您可以尝试以下方法之一来检索数据。

e.g。

 public ActionResult SomeAction(string cboGender)

或尝试使用

 string Gender= Request.QueryString["cboGender"];

 [HttpPost] 
 public ActionResult SubmitAction(FormCollection collection)
 {
    // Get Post Params Here
    string var1 = collection["cboGender"];
 }

答案 1 :(得分:0)

没有js没有其他方法可以做到这一点。
哦,也许你可以创建一个按钮来对表单进行汇总,这样你的服务器端就可以获得价值,  Request.Params [“cboGender”]将生效。然后过滤用户,渲染页面(这意味着刷新和糟糕的体验),这是你想要的吗?

我猜你曾经常常使用asp.net WebForm 事实上,WebForm框架也封装了很多js(JQuery)代码 最好的方法是:使用ajax将genderId发布到服务器方法,如下面

 [HttpPost]
        public JsonResult GetUserByGenderId(int? genderId)
        {
            var list =  AllUsers.Where(a => a.genderId == genderId);// filter user
            return Json(list);// return  serialized json or 
            return Json(list.Select(a=>new { a.UserName,a.UserId }).Tolist());

        }

并且ajax将接收此json以呈现cboUser。

答案 2 :(得分:0)

有很多方法可以做到这一点,但根据您提出问题的方式,我认为最简单的方法就是沿着这些方向做点什么:

1:在每个用户组的页面中放置一个新的组合框,并默认隐藏它们(请注意,我不是foreach就像你一样,但那只是为了简洁示例):

<select id="cboGender" name="cboGender">
  <option id="Male">Male</option>
  <option id="Female">Female</option>
  <option id="Unspecified">Unspecified</option>
</select>

<select id="cboMale" class="user-combo" name="user" hidden>
  <option id="1">Oscar</option>
  <option id="2">Leo</option>
</select>

<select id="cboFemale" class="user-combo" name="user" hidden>
  <option id="3">Kristy</option>
  <option id="4">Wendy</option>
</select>

<select id="cboUnspecified" class="user-combo" name="user" hidden>
  <option id="5">Jamie</option>
  <option id="6">Charlie</option>
</select>

2:使用jQuery监听&#34; cboGender&#34;组合框,然后在响应中显示相应的组合框:

var onGenderChanged = function() {
  var gender = $genders.val();

  // Hide all gender combo boxes...
  $userCombos.hide();

  // ... then show the one corresponding to the selection
  $("#cbo" + gender).show();
};

Here's a JSBin which shows a working implementation.

这样做的好处是可以节省您的往返行程。每次用户更改时都会获得针对性别的用户。

另一种选择是在选择性别时加载具有AJAX请求的用户,但这需要更多参与。

HTH