Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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# ASP.NET MVC:DropDownList到模型字段_C#_Asp.net Mvc_Model View Controller_Dropdown - Fatal编程技术网

C# ASP.NET MVC:DropDownList到模型字段

C# ASP.NET MVC:DropDownList到模型字段,c#,asp.net-mvc,model-view-controller,dropdown,C#,Asp.net Mvc,Model View Controller,Dropdown,我的模型是一个rpg角色。他有一个字段“Game”,这是一个强类型对象,包含“Careers”字段,其本身就是强类型对象。 模特必须在多重选择中选择职业 我当前按原样显示它: @Html.DropDownListFor(model => model.career, new SelectList(Model.game.professions, "name", "name"), ) (如果专业属于列表[职业]类型) 但是,这不会将dropdownlist的选定

我的模型是一个rpg角色。他有一个字段“Game”,这是一个强类型对象,包含“Careers”字段,其本身就是强类型对象。 模特必须在多重选择中选择职业

我当前按原样显示它:

  @Html.DropDownListFor(model => model.career, 
      new SelectList(Model.game.professions, "name", "name"), 
      )
(如果专业属于列表[职业]类型)

但是,这不会将dropdownlist的选定值绑定到我角色的“职业”字段

有什么提示吗?我已经搜索了一段时间,但我只找到了从模型填充dropdownlist的方法,而没有任何关于如何确保将所选值传递回模型的内容

多谢各位

Edit=我接受了RedGoodbarker的答案,尽管这不是我所期望的,因为它帮助我找到了解决方案


要点是:在mvc中,不能通过DDL选择对象,只能选择引用该对象的基本类型(在我的例子中,我选择了我职业生涯中的字符串字段“name”)

您的职业对象应该有Id字段,您需要将其传递给DropDownList for

请参考下面的链接


然后在Razor视图中

 @Html.DropDownListFor(m => model.career, new SelectList(Model.game.professions, "Value", "Text"), "Career")

当然,模型需要传递到视图中,并且列表中的值已经填充了

<select id="CarType" name="CarType">
  <option value="a">Volvo</option>
  <option value="b">Saab</option>
  <option value="c">Mercedes</option>
  <option value="d">Audi</option>
</select> 
你们可以做几个技巧,但问题是值得做,你们真的需要吗

通常,您的模型应该有字段
carlerName
,并且dropdownlist应该绑定到它。在接受表单提交的
Controller
Action
中,您应该使用
carreName
从数据库或其他存储区对
Carrer
进行再水化(这就是我们询问id的原因)

我知道
技能
是一种变化不大的字典。存储选项有(可能还有一些我不知道的选项):

  • 在提交表单之前,请将词典保存到
    会话
    ,如果此词典未更改,请在登录后保存到更好的会话。您可以在表单提交后访问它,并找到适当的键(最佳int或guid)
  • System.Web.Caching.Cache
  • TempData
  • 数据库
  • 这个选项有它的优缺点,您必须阅读,因为我不知道您的应用程序规范


    如果在视图或javascript中提交之前需要这些数据,您必须自己完成(没有简单的一行程序)。我可以帮你,但我不知道你想要实现什么。

    是model.career一个复杂的对象还是一个id(int)或name(string)@RedgoodBreaker它是一个没有id的复杂对象,因为它完全是在“游戏”中创建的。它由一个字符串“name”和一系列技能组成jobSkillsMVC无法从复杂类型中确定值并将其设置为control,我建议您添加一个新属性作为字符串,该属性将作为帮助器在窗体上获取和设置值。或者创建自定义Html帮助程序,它将接受您的复杂类型并相应地填充下拉列表。如果您需要自定义代码,请告诉我helper@KD但是,当MVC必须显示我的模型时(每个职业的名称在我的页面中清楚显示),而不是当MVC必须将值绑定到模型的字段时,它如何确定模型的内容呢?\。(我想要你的自定义助手代码,我自己也做过一些,但看到别人做事的方式不会有任何伤害)Html没有任何“绑定”的可能性。Defalut Html
    下拉列表
    可以有简单的
    和简单的
    文本
    。HTML不理解“对象”。如果你想要这样的东西。您应该在EventOnChange上编写一些javascript代码,它将填充隐藏字段。我不知道你们想显示什么,或者你们是否想把它发回服务器。再写一些代码,看看视图在选择值后应该怎么看,以及提交表单后服务器端应该有什么,但是为什么我不能在career对象中使用name字段而不是id字段呢?(因为我没有ID字段,我也不想同时更改角色和职业模型)您不能更改模型,然后使用viewmodel@EhsanSajjad我可以更改模型,但我不知道添加ID字段模型会有什么帮助,因为我不知道在哪里使用它或如何使用它。因此我不想添加它。我的角色有一个字段“metier”,类型为“career”。在控制器中,我将表单提交的角色对象传递到我的存储库,存储库使用新值进行更新。所以,我不明白的是,为什么所选择的职业不与我角色的职业领域相关联^^“等等,我不能绑定对象,我必须绑定简单类型属性?是这样吗?我不能简单地将职业传递给我的角色,我必须传递职业的参考?是吗?HTML不理解什么是对象。引用不会有帮助,因为当您发布表单时,它正在创建对象的新实例。Web应用程序不像桌面应用程序那样工作。每个请求都是一个新线程,因此您有不同的内存分配。告诉我们你想要实现什么。您是否只需要服务器端或浏览器上的“绑定”?那么“职业”对象包含一个技能列表(这也是项目中的一个类)。我需要将职业对象绑定到角色对象,以便知道需要处理哪些技能。当我发布表单时,它可以理解我创建了一个角色,那么为什么它不能同时使用职业对象呢?当我提交表单时,我设法传递了一个包含我的职业名称的字符串字段,并在其中添加了后端逻辑,但我觉得奇怪的是,我必须绑定子对象的字段,而不是对象本身。HTML中也没有类似对象的东西。这是可能的,但它更难使你的网站和创造安全漏洞。我知道技能是一种字典,所以如果这些数据被隐藏在表单中,那么有人可以修改这些字段并发送错误的数据,您将坚持使用这些数据
    ...
    CarType="a"
    ...