Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.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
C#MVC5@Html.EnumDropDownListFor在“上丢失选择”;回邮“;_C#_Asp.net_View_Asp.net Mvc 5 - Fatal编程技术网

C#MVC5@Html.EnumDropDownListFor在“上丢失选择”;回邮“;

C#MVC5@Html.EnumDropDownListFor在“上丢失选择”;回邮“;,c#,asp.net,view,asp.net-mvc-5,C#,Asp.net,View,Asp.net Mvc 5,MVC5 EF6 我有一个产品。一个产品可以有多个标题,一个标题的类型是枚举 我正在为产品创建视图-模型就是产品 视图: ProdTitle模型 public partial class ProdTitle { public long TitleID { get; set; } public long ProdID { get; set; } public Utils.Enums.TitleType TitleTypeID { get; set; } public

MVC5 EF6

我有一个产品。一个产品可以有多个标题,一个标题的类型是枚举

我正在为产品创建视图-模型就是产品

视图:

ProdTitle模型

public partial class ProdTitle
{
    public long TitleID { get; set; }
    public long ProdID { get; set; }
    public Utils.Enums.TitleType TitleTypeID { get; set; }
    public string Title { get; set; }
    public Utils.Enums.CultureID CultureID { get; set; }
    public System.DateTime DateCreated { get; set; }

    public virtual Product Product { get; set; }
    public virtual DataSource DataSource { get; set; }
}

在集合中处理dropdownlist时,您需要一个自定义的
编辑器模板

/Views/Shared/EditorTemplates/ProdTitle.cshtml

@model yourAssembly.ProdTitle

<tr>
  <td>
    @Html.TextBoxFor(m => m.Title, new { @class = "form-control" })
    @Html.ValidationMessageFor(m => m.Title, new { @class = "text-danger" })
  </td>
  <td>
    @Html.EnumDropDownListFor(m => m.TitleTypeID, new { @class = "form-control" })
  </td>
  <td>
    @Html.EnumDropDownListFor(m => m.CultureID, new { @class = "form-control" })
  </td>
</tr>
然后将控制器修改为

public ActionResult Create(Product product)

注意:您当前的
[Bind]
属性不包括绑定中的
ProdTitle
属性,并且在任何情况下,您都应该使用视图模型仅表示要显示/编辑的内容

显示控制器代码文化列如何?回发后的值是否正确?我假设有一些Javascript问题,可能是oncahnge事件重置了所选的值…@VladL该区域性当前只有一个选项,但我将尝试向其中添加另一个选项test@EhsanSajjad我现在不使用计算机,但会尽快添加。但是控制器中返回的产品已按预期填充。请确保检查Post方法。通常你会有两种方法。单击submit时,您将依赖于[HttpPost]属性方法,而不是原始方法。因此,如果您没有通过该方法来控制正确的类型,那么它将返回默认类型。Perfect-完全按照预期/要求工作。我是MVC新手,所以我不知道这种方法。我的方法几乎满足了我的需要,但现在我看到你的解决方案,这显然不是正确的方法。请详细说明您对
[Bind]
和视图模型的最后评论。我使用了支架式产品创建并尝试对其进行扩展。通常,如果数据模型用于创建或编辑对象,则不应在视图中使用数据模型。始终使用仅包含视图中所需属性的视图模型(请参阅),这意味着您永远不需要
[Bind(Include=“”)]
属性。根据您所展示的内容,您将拥有具有属性的
类ProdTitleVM
TitleTypeID
CultureID
以及
class-ProductVM
,其中包含属性
List-ProdTitle
。然后在GET方法中将属性映射到视图模型,在POST方法中将属性从视图模型映射到数据模型-使用诸如make-easter之类的工具。另外,查看您当前的属性-您排除了除
“ProdID,DateCreated”
之外的所有属性,但这是一种创建新产品的方法-ID和DateCeated属性的值甚至还不存在(尚未保存到数据库!),因此您实际上将所有属性从bindingGreat中排除,谢谢你的信息-我会查看你链接到的信息。作为后续操作,假设在您的示例中,我希望使TitleTypeID为只读(但仍保持下拉列表的外观),我可以将
@readonly=“readonly”、@disabled=“disabled”
添加到属性中,并将一个hiddenfield添加到模板中:
@Html.HiddenFor(m=>m.TitleTypeID)
但这样做会让我回到列表中的第一个枚举值,只要我点击了创建按钮而没有填写标题。你是如何做到的对不起,我不完全清楚你的要求是什么。如果
TitleTypeID
的初始值是(比如)A并且您已禁用下拉列表,则只有隐藏输入
A
的值将被发回,然后在返回视图时再次显示。你怎么改变它?
@model yourAssembly.ProdTitle

<tr>
  <td>
    @Html.TextBoxFor(m => m.Title, new { @class = "form-control" })
    @Html.ValidationMessageFor(m => m.Title, new { @class = "text-danger" })
  </td>
  <td>
    @Html.EnumDropDownListFor(m => m.TitleTypeID, new { @class = "form-control" })
  </td>
  <td>
    @Html.EnumDropDownListFor(m => m.CultureID, new { @class = "form-control" })
  </td>
</tr>
@model yourAssembly.Product
@using(Html.BeginForm())
{
  .... // other controls for properties of Product
  @Html.EditorFor(m => m.ProdTitles) // not in a loop!
}
public ActionResult Create(Product product)