我试图遍历填充我的选择框的值列表,然后根据结果设置一个字符串。对于每个所选项,字符串应包含1,对于未选中的每个项应包含零。我一直在尝试使用#Select选项:选中它来检查,但后来发现它选择了所有选中的选项,所以只给我字符串中的所有1。 以下是我的选择框:
<select multiple="multiple" id="Select">
@foreach (var val in Model.SelectStuff)
{
<option value="@val.Key">@val.Descript</option>
}
</select>
和JQuery:
var admaList = "";
$("#Select option").each(function () {
if ($("#Select option:selected")) { //I know this doesn't work!
list += "1,";
}
else {
list += "0,";
}
});
所以,2个问题。一个是,我如何利用它(如果可能的话),是否有一个我可以在JQuery中使用的列表,而不是将一个字符串传递回控件,我将不得不在以后打入列表?
答案 0 :(得分:3)
$('#Select')。val()从多个select元素返回所选选项的数组。
所以,在你的情况下,我不确定0和1的字符串是否真的是你想要的。例如,如果选项的“值”为ids,则采用:
<select id="Select" multiple="multiple">
<option value="1">Value 1</option>
<option value="2">Value 2</option>
<option value="3">Value 3</option>
</select>
如果选择1和3,则
$('#Select').val() // returns [1,3]
如果您想将其传递给服务器,那么</ p>
var selectedValues = $('#Select').val() || [];
selectedValues.join(","); // return "1,3"
答案 1 :(得分:0)
你是否尝试过不使用这样的jquery。可以使用jquery来完成它,但也可以使用视图模型。在视图中,您可以将选定值的列表连接到列表框。用户将能够选择一个或多个选项,它将自动填充选定的值。以下是一个例子。 我也没有真正编译就输入了这个,但我希望你能得到这个想法。
@Model SelectStuff
@using (Html.BeginForm("Index","Home",FormMethod.Post))
{
@Html.ValidationSummary(true)
@Html.ListBox("SelectStuffSelected", Model.SelectStuff, new { @class = "whatever here" })
// NOTE!!!!PAY ATTENTION HERE SelectStuffSelected will be used in the viewmodel!!!!!
<p >
<input type="submit" value="Submit" />
</p>
}
public ActionResult index()
return view();
[HttpPost]
public ActionResult(SelectStuff model)
{
return view(model);
}
public class SelectStuff
{
public SelectStuff(){InitialSignature();}
private void InitialSignature()
{
List<SelectListItem> IntialSignatureRaw = new List<SelectListItem>();
IntialSignatureRaw.Add(new SelectListItem
{
Text = "Yes",
Value = "1",
Selected = true
});
IntialSignatureRaw.Add(new SelectListItem
{
Text = "No",
Value = "0"
});
SelectStuff= new SelectList(IntialSignatureRaw, "Value", "Text");
}
//here comes the magic
public virtual MultiSelectList SelectStuff {get;set;}
public virtual List<string> SelectStuffSelected{get;set;}
//PAY ATTENTION HERE!!!!! do you see SelectStuffSelected is wired to the view above?
}