我有一个包含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>
任何有关我如何做到这一点的帮助都会很棒。
答案 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