Html 修改下拉菜单-自动生成的MVC/CRUD代码

Html 修改下拉菜单-自动生成的MVC/CRUD代码,html,visual-studio,model-view-controller,Html,Visual Studio,Model View Controller,我是EntityFramework/MVC新手,需要知道如何修改VisualStudio自动生成的下拉菜单。我想这应该很简单,但我还没有弄明白。我使用了数据库优先的方法,数据库中有以下两个表: public partial class RestaurantRating { public int RestaurantRatingId { get; set; } public int RestaurantRatingScore { get; set; }

我是EntityFramework/MVC新手,需要知道如何修改VisualStudio自动生成的下拉菜单。我想这应该很简单,但我还没有弄明白。我使用了数据库优先的方法,数据库中有以下两个表:

   public partial class RestaurantRating
    {    
      public int RestaurantRatingId { get; set; }
      public int RestaurantRatingScore { get; set; }
    }

  public partial class RestaurantType
    {
      public int RestaurantTypeId { get; set; }
      public string RestaurantTypeDesc { get; set; }
    }
我删除了额外的细节,但基本上其中一个将存储餐厅评级(评级为整数),另一个将存储餐厅类型(他们提供什么类型的食物)。两者之间唯一真正的区别是评级是一个整数,它们的类型描述是一个字符串

Visual Studio为这些表和其他表的CRUD操作自动生成代码。Create.cshtml中这两个表的HTML代码如下:

    <div class="form-group">
        @Html.LabelFor(model => model.RetaurantTypeId, "RetaurantTypeId", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("RetaurantTypeId", null, htmlAttributes: new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.RestaurantTypeId, "", new { @class = "text-danger" })
        </div>
    </div>
  <div class="form-group">
        @Html.LabelFor(model => model.RestaurantRatingId, "RestaurantRatingId", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("RestaurantRatingId", null, htmlAttributes: new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.Id, "", new { @class = "text-danger" })
        </div>
    </div>
问题和预期结果如下:

ViewBag.RestaurantRatingId = new SelectList(db.RestaurantRating, "RestaurantRatingId", "RestaurantRatingId");
ViewBag.RestaurantTypeId = new SelectList(db.RestaurantType, "RestaurantTypeId", "RestaurantTypeDesc");
  • RestaurantType的下拉菜单按预期工作。它只是将不同的类型加载到一个下拉菜单中,并允许用户选择其中一个。然而,餐厅将加载RatingID而不是描述,这正是我所需要的。我尝试过更改viewbag,但没有成功

  • HTML代码会自动为下拉菜单选择第一个值,但也可以将这些字段的空值保存到数据库中。如何为上面的下拉菜单添加空的默认值,以便在用户选择空值(或不触摸下拉菜单)时将空值推送到数据库


非常感谢您的帮助。我很乐意提供任何其他代码/信息。非常感谢你

您只需在下拉列表中添加一个选项标签,如下所示:-

@Html.DropDownList("RetaurantTypeId", null,"optionLable goes Here", htmlAttributes: new { @class = "form-control" })
并确保在另一端将其绑定到可为Null的模型属性,以便模型绑定器能够将模型属性值设置为Null。
希望这能回答您的问题。

此ViewBag代码是自动生成的吗?当您使用ViewBag.RestaurantingId=new SelectList(db.restauranting,“RestaurantingId”,“RestaurantingScore”)?是,ViewBag代码是自动生成的。我将代码更改为您提到的代码,现在工作正常。非常感谢。您能告诉我如何在上面的下拉代码中添加一个额外的空(默认)值,这样,如果用户不点击下拉菜单并提交表单,就会将空值发送回数据库吗?您可以尝试下面的@mohammed answer。另一种选择是将空值添加到数据库中的Restaurantate/Type中,例如“Blank”或“notselected”。这样,发布的值将与数据库中的值一致。如果可能的话,我更喜欢这样做,因为这样可以让寒冷更干净。(问:如果代码是自动生成的,是否每次重新生成时都会再次中断?)由于下拉列表包含分数(整数),我需要对它们执行操作(如平均),因此我无法在那里输入字符串。但我很感激!这就是我所需要的。非常感谢你!