Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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# MVC编辑器,带下拉列表和文本框_C#_Asp.net_Asp.net Mvc_Razor - Fatal编程技术网

C# MVC编辑器,带下拉列表和文本框

C# MVC编辑器,带下拉列表和文本框,c#,asp.net,asp.net-mvc,razor,C#,Asp.net,Asp.net Mvc,Razor,我还是MVC新手,我不太明白EditorFor在MVC5中是如何工作的 我正在基于现有数据库构建一个项目,因此对于EF使用数据库优先的方法是有意义的。创建模型和初始模板没有问题,但我的数据库中有一列如下所示: Plant ID Leaf Color 1 Green 2 Yellow 3 Green 4 Red 5 Green 6 Purple 由于绿色和黄色是植物叶子更

我还是MVC新手,我不太明白
EditorFor
在MVC5中是如何工作的

我正在基于现有数据库构建一个项目,因此对于EF使用数据库优先的方法是有意义的。创建模型和初始模板没有问题,但我的数据库中有一列如下所示:

Plant ID    Leaf Color
1           Green
2           Yellow
3           Green
4           Red
5           Green
6           Purple
由于绿色和黄色是植物叶子更常见的颜色

  • 问题的第一部分:我想创建一个包含选项的下拉列表:
    绿色、黄色和其他
    。(即,如果颜色为红色,则应指向下拉列表中的“其他”)

  • 问题的第二部分:一旦出现这种情况,或者当选择“其他”时,将出现一个新的
    文本框
    ,供用户手动输入颜色

  • 因此,它还扰乱了模型绑定和MVC验证

    在MVC 5中,当使用带有读/写操作和视图的
    MVC控制器,使用实体框架
    创建模板时,
    EditorFor
    将自动为该字段创建一个
    文本框
    Index.cshtml
    Delete.cshtml
    没有问题,因为它们不涉及
    EditorFor
    。但是,问题出现在
    Edit.cshtml
    Create.cshtml

    我将如何实现我所需要的


    其他信息:我对jQuery非常熟悉,在使用ASP.NET WebForm时,我知道如何使用jQuery隐藏/显示文本框,但我似乎不明白如何将其应用于EditorFor和LabelFor

    您可以使用jQuery将值从两个可见控件(回发时忽略)复制到一个不可见控件(在回发时用作颜色)。类似于这样;使用jquery对更改事件进行查询以保持控件的同步

    <div class="visible-controls">
    <select>
        <option>select</option>
        <option>Green</option>
        <option>Yellow</option>
        <option>Other</option>
    </select>
    <input type="text" placeholder="other" />
    </div>
    <div class="invisible-controls">
    <input type="text" name="colour" />
    </div>
    
    
    选择
    绿色
    黄色的
    其他
    

    我想主要的一点是Editorfor默认情况下不会生成类似的内容。对于复杂控件,您必须更接近原始html,而不是使用HtmlHelper。您可以这样做:

    Plant ID    Leaf Color
    1           Green
    2           Yellow
    3           Green
    4           Red
    5           Green
    6           Purple
    
    html位于您的html页面中,就在您的ViewBag下面

    @using (Html.BeginForm())
    {
    <p>
       Colour: @Html.DropDownList("Colour", "Select")
    
       @Html.TextBox
    
    
    </p>
    }
    
    @使用(Html.BeginForm())
    {
    
    颜色:@Html.DropDownList(“颜色”、“选择”)
    @Html.TextBox
    

    }
    在控制器中创建一个新方法并将其添加到中。它 创建包含所需三项的新下拉列表

    public ActionResult索引(字符串颜色)
    {
    //创建一个下拉列表
    var SearchOptionList=新列表();
    SearchOptionList.Add(“绿色”);
    SearchOptionList.Add(“黄色”);
    SearchOptionList.Add(“其他”);
    var mylist=从“您的数据库表名在这里”中的m选择m;
    //清除下拉列表
    ModelState.Remove(“颜色”)
    返回视图(mylist.ToList());
    }
    

    你在JQuery方面比我有更好的经验,你说你知道如何使文本框出现,所以你应该在中调整它。

    为下拉框和文本框创建一个具有单独属性的视图模型