【问题标题】:Update Form Multiple Select Can't Display Value in ASP.NET MVC更新表单多选无法在 ASP.NET MVC 中显示值
【发布时间】:2019-11-26 04:05:12
【问题描述】:

我有一个名为fruit 的多选类型控件。当我想更新fruitcollection 表单时,我之前输入的值无法出现在fruitcollection 多选表单上。解决方案是什么?谢谢

Update.cshtml(查看)

...
    <select class="form-control select2" multiple="multiple" name="FruitsCollection" value="@Model.Fruit">
     <option value="Apple">Apple</option>
     <option value="Banana">Banana</option>
     <option value="Watermelon">Watermelon</option>
    </select> 
... 

StoreController.cs(控制器)

MyDbContext db = new MyDbContext();
...
public ActionResult Update(int id)
{
      MasterStore store = new MasterStore();
      if (id!=0)
      {
          store = db.MasterStore.Where(s => s.Id == id).FirstOrDefault();
          promo.FruitsCollection = promo.Fruit.Split(',').ToArray();
      }
   return View(store);
}
[HttpPost]
public ActionResult UpdateStore(MasterStore store)
{
     MasterStore p = db.MasterStore.Where(s => s.Id == store.Id).First();
     p.Id = store.Id;
     p.Fruit = store.Fruit;
}
...

MasterStore.cs(模型)

...
public partial class MasterStore
{
    public int Id { get; set; }
    public string Fruit { get; set; }

    [NotMapped]
    public string[] FruitsCollection { get; set; }
}
...

【问题讨论】:

标签: c# mysql asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

根据您的模型,您可以执行以下操作:

<select class="form-control select2" multiple="multiple" name="FruitsCollection">
     <option value="Apple" selected="@(Model.FruitsCollection.Contains("Apple") ? "selected" : null)">Apple</option>
     <option value="Banana" selected="@(Model.FruitsCollection.Contains("Banana") ? "selected" : null)">Banana</option>
     <option value="Watermelon" selected="@(Model.FruitsCollection.Contains("Watermelon") ? "selected" : null)">Watermelon</option>
</select> 

这部分,

selected="@(Model.FruitsCollection.Contains("Apple") ? "selected" : null)"

将呈现为selected="selected",或被省略 - 标签生成器忽略设置为null 的属性。

这并不能很好地扩展。使用HtmlHelper 进行多选,ListBoxFor 助手可能会获得更好的结果:

@Html.ListBoxFor(m => m.FruitCollection, 
    /* todo */, 
    new { @class="form-control select2" })

您需要决定如何构建所需的第二个参数,其中我有 /* todo */ 占位符。这需要是MultiSelectList 类的实例,您可以内联创建它或作为在控制器中创建模型的一部分。以下是符合您的价值观的最低要求:

@Html.ListBoxFor(m => m.FruitCollection, 
    new MultiSelectList(new string[]{ "Apple", "Banana", "Watermelon" }), 
    new { @class="form-control select2" })

【讨论】:

    猜你喜欢
    • 2016-05-27
    • 1970-01-01
    • 2014-10-31
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    相关资源
    最近更新 更多