簡體   English   中英

MVC:我正在使用MultiSelectList,當我選擇兩個值時,它只是發送一個值?

[英]MVC: I am using MultiSelectList and when I select two values it just sends one value?

我在項目中使用MVC-Viewmodel,我的問題是,即使我在列表框中按住CTRL鍵並單擊兩個值,它也只能獲取一個值。 我希望用戶能夠選擇兩個值,但我不知道為什么它不會發生任何提示,謝謝!

這是我的控制器內部的GET n POST操作:

public ActionResult Create()
{          
    CreateViewModel model = new CreateViewModel();
    List<CoreValue> corevalues = Arep.getallC();
    model.CoreValuess = new MultiSelectList(corevalues, "CID", "Cname");  
    return View(model);

} 

[HttpPost]
public ActionResult Create(CreateViewModel model)
{
    if (ModelState.IsValid)
    {
        Question q = new Question();

      var CoreValueID = int.Parse(model.Cname);
      var getallC = Arep.getbycid(CoreValueID);

      q.CoreValue.Add(getallC);
      q.QuestionText = model.QuestionText;
      Arep.addquestion(q);
      Arep.save();


        return RedirectToAction("Index");
    }
    return View(model);

這是在我的CreateViewModel內部:

public MultiSelectList CoreValues { get; set; }

這是我的觀點:

 @Html.ListBoxFor(model => model.Cname,Model.Corevaluess)

似乎是什么問題?

提前致謝!

最好的祝福

除了拼寫錯誤,我相信以下是失敗的原因:

在您的ListBoxFor方法中,您正在使用model.Cname。 這樣,我相信您的意思是“選擇所選CoreValues的cName”。 但是(我猜是因為我看不到您的模型),CreateViewModel上的Cname屬性是字符串類型。 因此,您一次只能擁有一個價值。 您需要具有IEnumerable類型的屬性才能容納多個選擇。

將模型更新為以下內容:

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

SelectedValues將用於包含帖子中的選定值。 我們還可以向其中添加項目,以表示創建視圖時應自動選擇的內容。

在您的控制器中執行以下操作:

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

最后,更新視圖:

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

現在,無論何時發布,您都應該能夠看到用戶選擇的值。

編輯:我不完全確定您的某些方法做什么,所以我正在猜測。

用於創建的POST方法:

[HttpPost]
public ActionResult Create(CreateViewModel model)
{
    if (ModelState.IsValid)
    {
        foreach(var CoreValueID in model.SelectedValues)
        {
            Question q = new Question();

            var getallC = Arep.getbycid(CoreValueID);

            q.CoreValue.Add(getallC);
            q.QuestionText = model.QuestionText;
            Arep.addquestion(q);
        }

        Arep.save();

        return RedirectToAction("Index");
    }
    return View(model);
}

如上所述,ASP.Net Mvc希望有一個字符串列表,但是通過使用經典的ASP樣式可以實現相同的目的

Request.Form["CoreValues"]

這將提供逗號分隔的值。

您需要按如下所示傳遞selectedValues

List<CoreValue> selectedvalues = Null;
model.CoreValuess = new MultiSelectList(corevalues, "CID", "Cname",selectedvalues);  
return View(model);

請參閱MSDN鏈接此有用的文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM