JQuery从语句MVC3获取多选列表中的值

时间:2011-10-21 22:27:22

标签: jquery asp.net-mvc-3 select if-statement

我试图遍历填充我的选择框的值列表,然后根据结果设置一个字符串。对于每个所选项,字符串应包含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中使用的列表,而不是将一个字符串传递回控件,我将不得不在以后打入列表?

2 个答案:

答案 0 :(得分:3)

$('#Select')。val()从多个select元素返回所选选项的数组。

http://api.jquery.com/val/

所以,在你的情况下,我不确定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?
}