我还是MVC的新手,我不太了解EditorFor
在MVC 5中是如何工作的。
我正在基于现有数据库构建项目,因此对EF使用Database First方法是有意义的。我创建模型和初始模板没有问题,但我的数据库中有一列如下所示:
Plant ID Leaf Color
1 Green
2 Yellow
3 Green
4 Red
5 Green
6 Purple
由于绿色和黄色是植物叶子的常见颜色,
问题的第一部分:我想创建一个带有选项的DropDownList:Green, Yellow and Other
。 (即如果颜色为红色,则应指向"其他"在DropDownList中)
问题的第二部分:一旦发生,或者其他"如果选中,则会显示一个新的TextBox
,供用户手动输入颜色。
因此,它还会混淆模型绑定和MVC验证。
在MVC 5中,使用MVC Controller with read/write actions and views, using Entity Framework
创建模板时,EditorFor
会自动为此字段创建TextBox
。 Index.cshtml
和Delete.cshtml
没有问题,因为它们不涉及EditorFor
。但是,问题出现在Edit.cshtml
和Create.cshtml
。
我将如何实现我的需求?
附加信息:我很熟悉jQuery,在做ASP.NET WebForm时,我知道如何使用jQuery来隐藏/显示文本框,但我似乎并不了解如何申请这到EditorFor和LabelFor
答案 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更好的经验,你说你知道要让文本框出现,所以你应该适应它。