Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 MvcScaffold未正确创建我的相关下拉列表_Asp.net Mvc 3_Razor_Scaffolding_Ef Code First_Scaffold - Fatal编程技术网

Asp.net mvc 3 MvcScaffold未正确创建我的相关下拉列表

Asp.net mvc 3 MvcScaffold未正确创建我的相关下拉列表,asp.net-mvc-3,razor,scaffolding,ef-code-first,scaffold,Asp.net Mvc 3,Razor,Scaffolding,Ef Code First,Scaffold,MvcScaffold版本:0.9.7 好的,MvcScaffold在我的_CreateOrEdit.cshtml部分视图中为我生成以下代码: <div class="editor-field"> @Html.DropDownListFor(model => model.LocationId, ((IEnumerable<JobSite.Models.Location>)ViewBag.PossibleLocations).Select(option =&g

MvcScaffold版本:0.9.7

好的,MvcScaffold在我的_CreateOrEdit.cshtml部分视图中为我生成以下代码:

<div class="editor-field">
    @Html.DropDownListFor(model => model.LocationId, ((IEnumerable<JobSite.Models.Location>)ViewBag.PossibleLocations).Select(option => new SelectListItem {
        Text = Html.DisplayTextFor(_ => option).ToString(), 
        Value = option.LocationId.ToString(),
        Selected = (Model != null) && (option.LocationId == Model.LocationId)
    }), "Choose...")
    @Html.ValidationMessageFor(model => model.LocationId)
</div>
…但我想解决这个问题以避免出现这种情况

有人能提供一些指导吗


谢谢Paul

我相信问题在于MvcScaffolding不知道应该用什么属性来表示文本字段。模板试图在类中找到一个候选属性,它认为该属性可能代表一个列,该列的值代表“text”属性。我看过代码,它会查找诸如“Name”、“Title”等内容。如果找到其中一个,它将使用该字段作为文本属性。以下是它使用的实际代码:

static string[]displayPropertyNames=new[]{“Name”、“Title”、“LastName”、“姓氏”、“Subject”、“Count”}

它将使用它找到的第一个代码,如果它根本没有找到任何代码,那么您将获得当前的代码。这并不理想,因为您可能没有这些名称中的任何一个,并且/或者您可能有一个包含其中一个名称的字段,但可能不希望它代表下拉列表中的文本值

另一个解决这个问题的选项是创建一个分部类,并在绑定到下拉列表的模型类型上附加一个DisplayColumn属性。例如:

[DisplayColumn(“LocationName”)]公共部分类DropDownBoundType{}

然而,我发现部分类的实现导致了一些其他问题,MvcScaffolding生成器停止将字段识别为关联键。因此,在某些情况下,它不会生成下拉列表,而是生成文本框。还不确定问题是什么,也许不会影响你,但不幸的是,这是我非常谨慎的行为

我还注意到您运行的是9.7,并且有一个新版本9.8可用。我不认为它解决了你的问题,但它解决了其他一些问题。这可能值得你花时间继续更新它

<select data-val="true" data-val-number="The field LocationId must be a number." data-val-required="The LocationId field is required." id="LocationId" name="LocationId"><option value="">Choose...</option>
     <option value="1">1</option>
     <option value="2">2</option>
</select>
Text = Html.DisplayTextFor(_ => option.LocationName).ToString(),