在MVC中使用IEnumerable选择和添加多个值

时间:2012-03-13 10:14:30

标签: asp.net-mvc asp.net-mvc-3 model-view-controller ienumerable

我尝试使用IEnumerable,因此它包含多个选项,因此用户可以在列表框中选择多个值。

这就是我的ViewModel的样子:

    public class CreateViewModel
{
    public IEnumerable<string> SelectedValues { get; set; } 
    public IEnumerable<CoreValue> CoreValues { get; set; }
}

这是我在我的控制器中的GET:

public ActionResult Create()
{          
    CreateViewModel model = new CreateViewModel();
    model.CoreValues = AdminRepository.GetAllCoreValues();
    return View(model);
}

我的观点如下:

@Html.ListBoxFor(m => m.SelectedValues, new MultiSelectList(Model.CoreValues, "Id", "Name"))

如何编写POST操作代码,以便SelectedValues用于包含帖子上的选定值?

在Ienumerable之前我在我的ViewModel中将字符串声明为CoreValueName并且我在我的POST操作中做了类似这样的事情,但是现在我将其更改为Ienumerable并且我不确定如何编码所以我的选择值将用于包含我帖子中的选定值。

Question question = new Question();
var CoreValueID = int.parse(model.CoreValueName);
var GetAllCoreValuesID = AdminRep.GetByCoreValueID(CoreValueID);             
question.CoreValue.Add(GetAllCoreValuesID);
AdminRepository.AddQuestion(question);
AdminRepository.save();

我的POST操作的这个版本非常有效,因为我的Viewmodel中将.SubjectType声明为字符串:

    [HttpPost]
        public ActionResult Create(AdminCreateViewModel model)
        {

                Question question = new Question();       
                var SubjectTypeID = int.Parse(model.SubjecTypeName);
                var GetAllSubjecTypesID = AdminRep.GetBySubjectTypeID(SubjectTypeID);
                question.SubjectType.Add(GetAllSubjecTypesID);
                AdminRep.AddQuestion(question);
                AdminRep.save();
        }

此版本的Post操作无法正常工作Model.Selectedvalues在我的ViewModel中被声明为Ienumerable字符串。我试图int.parse我的model.SelectedValues,但这对Ienumerable不起作用。并且GetByCoreValueID方法将int作为参数,所以我不知道如何做到这一点。我需要foreach吗?

 [HttpPost]
 public ActionResult Create(AdminCreateViewModel model)
 {
    Question question = new Question(); 
    var CoreValueID = model.SelectedValues;
    var GetAllCoreValuesID = AdminRep.GetByCoreValueID(CoreValueID); //
    question.CoreValue.Add(GetAllCoreValuesID);
    AdminRep.AddQuestion(question);
    AdminRep.save();

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可以让POST控制器操作将视图模型作为参数。然后SelectedValues属性将包含用户选择的值列表:

[HttpPost]
public ActionResult Index(CreateViewModel model)
{
    model.SelectedValues will cnotain the selected values from the user here
    ...
}