如何在 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 =&gt; a.Type)) 已经给了我想要的下拉列表,根据我链接的微软文章,我只需要提供第二个参数来建立一个选定的值(可能是“Id”,而不是“B”?)。

【讨论】:

以上是关于如何在 cshtml 视图中正确设置所选项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何让asp.net core mvc发布时候不编译cshtml视图

如何读取表格视图中所选行的背景颜色?

如何在 ASP.NET Core Razor Pages 项目的 _layout.cshtml 文件中使用 Razor Page Using Entity Framework 作为部分视图?

如何设置和获取在循环中创建的按钮的 ID?

如何在 RecyclerView 中选择和取消选择项目?如何仅在回收站视图中突出显示所选项目?

如何在 CSS 中正确设置网格以实现移动友好视图? (Python Dash 项目)