MVC EditorFor with Dropdownlist和Textbox

时间:2015-01-15 14:41:48

标签: c# asp.net asp.net-mvc razor

我还是MVC的新手,我不太了解EditorFor在MVC 5中是如何工作的。

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

Plant ID    Leaf Color
1           Green
2           Yellow
3           Green
4           Red
5           Green
6           Purple

由于绿色和黄色是植物叶子的常见颜色,

  1. 问题的第一部分:我想创建一个带有选项的DropDownList:Green, Yellow and Other。 (即如果颜色为红色,则应指向"其他"在DropDownList中)

  2. 问题的第二部分:一旦发生,或者其他"如果选中,则会显示一个新的TextBox,供用户手动输入颜色。

  3. 因此,它还会混淆模型绑定和MVC验证。

    在MVC 5中,使用MVC Controller with read/write actions and views, using Entity Framework创建模板时,EditorFor会自动为此字段创建TextBoxIndex.cshtmlDelete.cshtml没有问题,因为它们不涉及EditorFor。但是,问题出现在Edit.cshtmlCreate.cshtml

    我将如何实现我的需求?

    附加信息:我很熟悉jQuery,在做ASP.NET WebForm时,我知道如何使用jQuery来隐藏/显示文本框,但我似乎并不了解如何申请这到EditorFor和LabelFor

2 个答案:

答案 0 :(得分:0)

您可以使用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

答案 1 :(得分:0)

你可以这样做:

html位于您的ViewBag

下的html页面内
@using (Html.BeginForm())
{
<p>
   Colour: @Html.DropDownList("Colour", "Select")

   @Html.TextBox


</p>
}
  

在控制器中创建一个新方法并将其添加进去。它   使用您想要的三个项目创建一个新的下拉列表

 public ActionResult Index(string Colour)
        {
           //Create a Dropdown list
            var SearchOptionList = new List<string>();
            SearchOptionList.Add("Green");
            SearchOptionList.Add("Yellow");
            SearchOptionList.Add("Other");

 var mylist = from m in "your database table name goes in here" select m;

//Clears dropdown list
 ModelState.Remove("Colour")

return View(mylist.ToList());

}

你有比JQuery更好的经验,你说你知道要让文本框出现,所以你应该适应它。