更新表单多个 Select 无法在 ASP.NET MVC 中显示值
Update Form Multiple Select Can't Display Value in ASP.NET MVC
我有一个名为 fruit 的多 select 类型控件。当我要更新fruitcollection 表单时,我之前输入的值不能出现在fruitcollection multiple select 表单上。解决办法是什么?谢谢
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; }
}
...
根据您的模型,您可以做这样的事情:
<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
用于多 select,ListBoxFor 助手可能会获得更好的结果:
@Html.ListBoxFor(m => m.FruitCollection,
/* todo */,
new { @class="form-control select2" })
您需要决定如何构建所需的第二个参数,其中我有 /* todo */
占位符。这需要是 MultiSelectList class 的一个实例,您可以内联创建它或作为在控制器中创建模型的一部分。这是符合您的价值观的最低要求:
@Html.ListBoxFor(m => m.FruitCollection,
new MultiSelectList(new string[]{ "Apple", "Banana", "Watermelon" }),
new { @class="form-control select2" })
我有一个名为 fruit 的多 select 类型控件。当我要更新fruitcollection 表单时,我之前输入的值不能出现在fruitcollection multiple select 表单上。解决办法是什么?谢谢
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; }
}
...
根据您的模型,您可以做这样的事情:
<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
用于多 select,ListBoxFor 助手可能会获得更好的结果:
@Html.ListBoxFor(m => m.FruitCollection,
/* todo */,
new { @class="form-control select2" })
您需要决定如何构建所需的第二个参数,其中我有 /* todo */
占位符。这需要是 MultiSelectList class 的一个实例,您可以内联创建它或作为在控制器中创建模型的一部分。这是符合您的价值观的最低要求:
@Html.ListBoxFor(m => m.FruitCollection,
new MultiSelectList(new string[]{ "Apple", "Banana", "Watermelon" }),
new { @class="form-control select2" })