【问题标题】:How to choose from a list in Razor?如何从 Razor 的列表中进行选择?
【发布时间】:2020-02-05 21:20:22
【问题描述】:

我在C# 有一个使用MVC 设计模型的项目。 View 从 Controller 接收一个 ViewModel,其中包含可用汽车的列表,并且用户应该能够从下拉列表中选择一个。

<div>
       <text>Choose car</text>
       <select name="Rental.CarID">
           @{ foreach (var n in Model.AvailableCars)
               {
                   <option value="n.id">@n.LicensePlate</option>
               }
           }
       </select>
   </div>

但是参数Rental.CarID 被返回为空。

如果我像这样手动输入rental.CarID,它确实有效:

<div>
       <text>Choose Car</text>
       <input type="number" name="Rental.CarID" />
</div>

如何修复上面的代码以便返回参数?

【问题讨论】:

  • 什么是Rental.CarID?它是您剃刀页面上的变量还是应该来自您的模型?无论哪种情况,它都缺少前面的 @ 表示法。
  • @Daxton 它来自 ViewModel。当我向其中添加@ 时,我收到错误The name Rental does not exist in the current context

标签: c# model-view-controller razor


【解决方案1】:

您需要让您的 razor 页面知道您正在尝试访问 Model 属性。符号很简单:

<select name="@Model.Rental.CarID">
      @{ foreach (var n in Model.AvailableCars)
          {
             <option value="@n.id">@n.LicensePlate</option>
          }
       }
</select>

另外,包含foreach 的代码块是多余的。你可以简单地写:

@foreach (var n in Model.AvailableCars)
     {
         <option value="@n.id">@n.LicensePlate</option>
     }

导致:

<select name="@Model.Rental.CarID">
      @foreach (var n in Model.AvailableCars)
      {
          <option value="@n.id">@n.LicensePlate</option>
      }
</select>

【讨论】:

  • 当我这样做时,我收到错误消息Only one 'model' statement is allowed in a file. 另外,我看不出你在foreach 代码中做了什么不同的事情?
  • @Roger 我强烈建议您查看一些简单的 Razor 语法教程。这是start。与foreach 的区别很小,您无需使用@ { } 符号将代码块包裹在foreach 周围。您收到的消息使您看起来好像在页面中多次分配@model。请注意,@Model@model非常不同,因为 C# razor 页面区分大小写。我会通读一些剃刀语法教程以了解其中的区别。
【解决方案2】:

试试这个:

<select name="@Model.Rental.CarID">
      @{ foreach (var n in Model.AvailableCars)
          {
             <option value=n.id>n.LicensePlate</option>
          }
       }
</select>

foreach 语句之前的第一个“@”应该覆盖其余的程序表达式。

【讨论】:

  • 当我添加@Model 时,我收到此错误消息Only one 'model' statement is allowed in a file. 此外,在foreach 之前添加@ 并稍后将其省略,仅显示n.idn.LicensePlate 时代码生成,而不是值
【解决方案3】:

我在您的代码中看到的唯一问题是,选项值与 ID 无关。您能否检查生成的 html 代码 Options 是否与 Ids 相关联。

要解决这个问题,请使用这个:

<option value="@n.id">@n.LicensePlate</option>

【讨论】:

  • 生成的 HTML 代码与我要求手动输入时的nameRental.CarID 相同
  • @Roger select下面的&lt;option&gt;标签怎么样?它们是否显示 value 属性的预期 ID(在您的情况下为 @n.id)?
【解决方案4】:

您需要写@Model.Rental.CarID 而不是Rental.ID。

你的代码将是

<select name="@Model.Rental.CarID">
            @foreach (var n in Model.AvailableCars)
               {
                   <option value="@n.id">@n.LicensePlate</option>
               }

       </select>

【讨论】:

  • 当我这样做时,我收到错误消息Only one 'model' statement is allowed in a file.
  • 请分享您的模型数据。
猜你喜欢
  • 1970-01-01
  • 2012-05-08
  • 2017-06-17
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
相关资源
最近更新 更多