如何在 cshtml 视图中正确设置所选项目?
Posted
技术标签:
【中文标题】如何在 cshtml 视图中正确设置所选项目?【英文标题】:How to properly set a selected item in a cshtml view? 【发布时间】:2021-12-02 21:49:41 【问题描述】:我在 ViewModel 中定义了这个 SelectList
:
public SelectList AccomodationTypesTypes()
return new SelectList(AccomodationTypes.Select(a => a.Type), "B");
AccomodationTypes.Select(a => a.Type)
是一个IENumerable<string>
,目前由“A”、“B”和“C”组成。
根据https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.rendering.selectlist.-ctor,您可以提供第二个参数来指示所选值——在我的例子中是硬编码的“B”——但这不起作用。
如果有任何帮助,这是视图中具有SelectList
的sn-p:
<div class="form-group row">
<label asp-for="Accomodation.AccomodationTypeId" class="col-sm-2 col-form-label">Type</label>
<div class="col-sm-10"><select asp-for="Accomodation.AccomodationTypeId" asp-items="Model.AccomodationTypesTypes()"></select></div>
</div>
视图显示特定选定住宿的特征。 AccomodationTypeId 是 AccomodationType 类的外键,表示更一般的特征。在视图中,用户可以为当前的Accomodation 选择不同的AccomodationType。当视图在屏幕上呈现时,我希望选择类型“B”,但目前不是。我怎样才能做到这一点?
【问题讨论】:
这段代码有很多错误,这就是它不能正常工作的原因。 嗯,是的,很多都在这里。我认为在使用 asp-for 时,您需要将Accomodation.AccomodationTypeId
设置为您的选择中应该具有的任何值“B”,但是由于您没有为您的选择设置值,这可能很困难。您可以尝试添加您呈现的 html 的图片(而不是 cshtml 代码)吗?
@Serge 不我不同意:我只需要更改一行,请参阅我的答案。进一步为我辩护:我提到的微软文章指出,“selectedValue”应该作为第二个参数提供。 “B”作为一个可以选择的值是完全可以的。
@Cooz 它会起作用,但这不是最好的方法。很抱歉,但我想知道,既然您是在回答自己的问题,为什么要发布这些问题?
@Serge 好吧,我当然不是唯一这样做的人——人们在 Stack Overflow 上回答他们自己的问题。也许是顿悟?终于在搜索了一天之后找到了一篇提供这种见解的文章?对我来说有正当理由。我是一个新手,还在学习——而且,你显然已经超出了这个范围。但是,是最好的方法是什么?我想出的方法有什么问题?
【参考方案1】:
我通过使用不同的 SelectList 重载解决了这个问题:
public SelectList AccomodationTypesTypes()
return new SelectList(AccomodationTypes, "Id", "Type");
"Id"
与视图中的 asp-for (Accomodation.AccomodationTypeId
) 绑定,对应的"Type"
显示在选择列表中。行得通。
我走错了方向,因为return new SelectList(AccomodationTypes.Select(a => a.Type))
已经给了我想要的下拉列表,根据我链接的微软文章,我只需要提供第二个参数来建立一个选定的值(可能是“Id”,而不是“B”?)。
【讨论】:
以上是关于如何在 cshtml 视图中正确设置所选项目?的主要内容,如果未能解决你的问题,请参考以下文章
如何让asp.net core mvc发布时候不编译cshtml视图
如何在 ASP.NET Core Razor Pages 项目的 _layout.cshtml 文件中使用 Razor Page Using Entity Framework 作为部分视图?