mvc dropdown显示与赋值

本文详细介绍了如何在ASP.NET MVC应用中从Web.config配置文件中获取数据,并将其绑定到DropdownList控件。通过将数据存储在配置文件中,实现数据的集中管理与复用。同时,展示了如何直接在视图中使用静态数据和配置文件中的动态数据进行数据绑定,以灵活地展示和选择数据。
 public ActionResult Index()
        {
            List<SelectListItem> items = new List<SelectListItem>();
           items.Add(new SelectListItem { Text = "wenbin", Value = "1" });
           items.Add(new SelectListItem { Text = "duying", Value = "2" });
           items.Add(new SelectListItem { Text = "baby", Value = "3", Selected = true });
           ViewData["register"] = items;

           List<SelectListItem> newItem = new List<SelectListItem>();
           string[] str = ConfigurationManager.AppSettings["test"].Split(',');
           foreach (var m in str) {
               newItem.Add(new SelectListItem { Text = m, Value = m});
           }
           ViewData["newItem"] = newItem;
            return View();
        }

在视图中可以直接这样

@Html.DropDownList("register")
@Html.DropDownList("newItem1", (List<SelectListItem>)ViewData["newItem"], new { @class = "from" })

第一个直接把值在list 直接写出来了,第二个是把值存在web.config中,然后再取出来,数据便于统一管理。

存在web.config中的代码,就是找到appsetting节点,写一个add

<appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />

    <add key="test" value="mm,kk,ll" />

  </appSettings>

后期前台设计人员特殊需要估计dropdown还不能直接在view中用那种写法,后期再说。。先学个从web.config中取值。

///////////////////////////////////////////////////////////////////////////

各种bug,反正有时候这样绑定的时候,出现什么system.string不能Ienumber<>的时候,在post action中在吧那个viewdate在写一遍

2015年3月4日23:30:57

view:
    @Html.DropDownList("selected", ViewData["TherapeuticArea"] as IEnumerable<SelectListItem>,new { @class = "form-text form-control" })

action
 this.ViewData["TherapeuticArea"] = _commonService.GetSelectList("TA"); ;
            this.ViewData["selected"] = entity.TherapeuticArea;//默认的选中项,前台dropdown第一个参数就不是name了,而是selected...
<think>好的,我现在要解决用户的问题:Unity的Dropdown组件无法赋值给resolutionDropdown字段。首先,我需要理解用户遇到的错误是什么样的情况。通常,这类问题可能由几个常见原因引起,比如脚本变量未正确关联、命名空间缺失、组件类型不匹配,或者Unity版本问题。接下来,我需要逐步分析可能的原因,并提供对应的解决方案。 首先,用户提到的是Dropdown组件无法赋值给resolutionDropdown字段。根据经验,可能用户尝试在Inspector窗口中将Dropdown组件拖拽到脚本的public Dropdown变量上,但拖拽不成功,或者出现错误提示。这个时候,我应该考虑第一步检查变量类型是否正确。 Unity的Dropdown组件有两种可能性:旧版的Unity可能使用UnityEngine.UI.Dropdown,而新版(例如使用TextMeshPro后)可能需要使用TMP_Dropdown。如果用户脚本中声明的是Dropdown类型,但实际场景中的组件是TMP_Dropdown,或者反过来,就会导致类型不匹配,无法赋值。因此,我需要建议用户检查脚本中的变量类型是否实际组件类型一致。例如,如果使用了TextMeshPro,应该将变量类型改为TMP_Dropdown,并引入对应的命名空间。 接下来,检查命名空间是否正确。UnityEngine.UI.Dropdown需要引入UnityEngine.UI的命名空间,而TMP_Dropdown需要引入TMPro的命名空间。如果脚本中没有包含相应的using语句,编译器会无法识别类型,导致变量无法显示在Inspector中,或者显示为错误类型。因此,用户需要确认是否在脚本开头添加了正确的using指令,比如using UnityEngine.UI;或者using TMPro;。 第三个可能的原因是变量不是public或者没有序列化。如果用户将变量声明为private而没有使用[SerializeField]属性,那么该变量不会在Inspector中显示,导致无法拖拽赋值。此时需要建议用户将变量设为public,或者添加[SerializeField]属性。 另外,可能需要检查Unity版本和组件兼容性。如果用户升级了Unity版本或者更换了渲染管线,可能导致组件引用失效。这种情况下,重新导入相关包(如TextMeshPro)或者创建新的Dropdown组件可能解决问题。 还有一种情况是,场景中的Dropdown对象确实没有正确的组件附加。例如,用户可能误删了组件,或者错误地添加了其他类型的组件。此时需要检查GameObject上的组件是否存在,并确认类型是否匹配脚本中的变量类型。 最后,用户可能需要重新启动Unity或者重新导入脚本,以解决编辑器缓存导致的显示问题。有时候编辑器会出现临时故障,重启可以解决。 总结起来,解决步骤应该是: 1. 检查变量类型是否匹配。 2. 确认命名空间是否正确引入。 3. 确保变量是public或使用[SerializeField]。 4. 检查场景中的组件是否存在且正确。 5. 处理Unity版本或组件兼容性问题。 6. 必要时重启或重新导入。 现在,我需要将这些思考整理成用户能够理解的步骤,用中文清晰地表达出来,避免技术术语过于复杂,同时确保每个步骤都有明确的解决方法。这样用户就能一步步排查问题,找到适合自己的解决方案。</think>### 解决Unity Dropdown组件无法赋值给resolutionDropdown字段的步骤: #### 1. **检查变量类型是否匹配** - **旧版UI组件**: 若使用`UnityEngine.UI.Dropdown`,脚本中的字段应声明为: ```csharp using UnityEngine.UI; public Dropdown resolutionDropdown; // 或 [SerializeField] Dropdown resolutionDropdown; ``` - **TextMeshPro组件**: 若使用TextMeshPro的Dropdown,需改用`TMP_Dropdown`类型: ```csharp using TMPro; public TMP_Dropdown resolutionDropdown; // 或 [SerializeField] TMP_Dropdown resolutionDropdown; ``` #### 2. **确认命名空间是否正确** - **普通UI组件**: 在脚本开头添加: ```csharp using UnityEngine.UI; ``` - **TextMeshPro组件**: 添加命名空间: ```csharp using TMPro; ``` - **错误示例**: ❌ 未添加`using TMPro;`时,`TMP_Dropdown`会报错“未找到类型”。 #### 3. **确保字段可被Inspector识别** - **Public字段**: 直接标记为`public`: ```csharp public Dropdown resolutionDropdown; ``` - **Private字段**: 使用`[SerializeField]`属性: ```csharp [SerializeField] private Dropdown resolutionDropdown; ``` #### 4. **检查场景中的组件类型** - **步骤**: 1. 在Hierarchy中选择包含Dropdown的GameObject。 2. 查看Inspector面板,确认附加的是`Dropdown`还是`TMP_Dropdown`组件。 3. 若类型不匹配,右键删除旧组件,通过菜单重新添加正确组件: - 普通Dropdown:`UI > Dropdown` - TMP Dropdown:`UI > Dropdown - TextMeshPro` #### 5. **处理Unity版本兼容性问题** - **TextMeshPro未安装**: 若未安装TMP,通过`Window > Package Manager`安装`TextMeshPro`包。 - **组件丢失引用**: 升级Unity后,尝试重新导入所有资源(右键Project面板选择`Reimport All`)。 #### 6. **重启Unity或重新挂载脚本** - **编辑器缓存问题**: 关闭Unity,删除项目目录下的`Library`文件夹,重新打开项目。 - **脚本挂载问题**: 移除GameObject上的脚本组件,重新添加。 --- ### 常见错误示例及修复 | **现象** | **原因** | **解决方法** | |------------------------------------|-------------------------|---------------------------------------| | 拖拽后字段显示“None (Dropdown)” | 类型不匹配 | 检查声明的是`Dropdown`还是`TMP_Dropdown` | | 字段在Inspector中完全不可见 | 未标记为public或SerializeField | 添加`public`或`[SerializeField]` | | 编译报错“未找到类型” | 缺少命名空间 | 添加`using UnityEngine.UI;`或`using TMPro;` | --- ### 完整代码示例(普通Dropdown) ```csharp using UnityEngine; using UnityEngine.UI; public class ResolutionSettings : MonoBehaviour { public Dropdown resolutionDropdown; // 或 [SerializeField] private Dropdown resolutionDropdown; void Start() { // 动态填充选项示例 resolutionDropdown.ClearOptions(); resolutionDropdown.AddOptions(new List<string> { "1920x1080", "1280x720" }); } } ``` ### 若仍有问题,请检查: 1. 场景中的GameObject是否**激活**(Inspector左上角勾选框)。 2. 脚本是否挂载到**正确的GameObject**上。 3. 是否存在**多个同名脚本**导致混淆。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值