C# 如何自定义Html帮助程序以根据问题类型进行操作?
我做了一个调查申请,如下设计:C# 如何自定义Html帮助程序以根据问题类型进行操作?,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我做了一个调查申请,如下设计: Survey: ID,Name. Question: ID,SurveyId,QuestionText,QuestionTypeId. QuerstionType can be (Text, CheckBox, DropDown,RadioButton). 在运行时为每个问题提供合适的Html助手的最佳实践是什么 目前我使用的是传统的if-else语句 if(QuestionModel.QuestionTypeId==QuestionTypes.Text) {
Survey: ID,Name.
Question: ID,SurveyId,QuestionText,QuestionTypeId.
QuerstionType can be (Text, CheckBox, DropDown,RadioButton).
在运行时为每个问题提供合适的Html助手的最佳实践是什么
目前我使用的是传统的if-else语句
if(QuestionModel.QuestionTypeId==QuestionTypes.Text)
{
@Html.editor()
}
else if(QuestionModel.QuestionTypeId==QuestionTypes.DropDown)
{
@Html.DropDownList()
}
else
{
...
}
等等
我觉得我做错了什么,有没有办法定制一个html助手,根据问题类型采取不同的行动
或者,如果我可以将html帮助程序附加到视图模型,并在视图中直接使用它,如下所示:
Model.CustomDropdown.
您可以创建自定义Html帮助器组件,如下所示:
namespace System.Web.Mvc
{
public static partial class HtmlHelperExtensions
{
public static MvcHtmlString CustomComponent(this HtmlHelper helper, string QuestionTypeId)
{
if (QuestionTypeId == "Text")
{
var inputTag = new TagBuilder("input");
inputTag.MergeAttribute("type", "text");
return MvcHtmlString.Create(inputTag.ToString());
}
else if (QuestionTypeId == "DropDown")
{
var dropDownTag = new TagBuilder("select");
dropDownTag.MergeAttribute("type", "text");
var option = new TagBuilder("option");
option.InnerHtml = "Option 1";
option.MergeAttribute("value", "option1");
dropDownTag.InnerHtml += option.ToString();
option = new TagBuilder("option");
option.InnerHtml = "Option 2";
option.MergeAttribute("value", "option2");
dropDownTag.InnerHtml += option.ToString();
return MvcHtmlString.Create(dropDownTag.ToString());
}
else
{
var inputTag = new TagBuilder("input");
inputTag.MergeAttribute("type", "checkbox");
return MvcHtmlString.Create(inputTag.ToString());
}
}
}
}
在你的Razor代码中,你可以这样称呼它:
@Html.CustomComponent("Text")
@Html.CustomComponent("DropDown")
@Html.CustomComponent("Check")
在创建组件时,必须在参数中传递自定义对象,而不是字符串。此外,在调用时,您必须传递该自定义对象。比如:
public static MvcHtmlString CustomComponent(this HtmlHelper helper, QuestionModel questionModel)
{
if (questionModel.QuestionTypeId==QuestionTypes.Text)
{
var inputTag = new TagBuilder("input");
inputTag.MergeAttribute("type", "text");
return MvcHtmlString.Create(inputTag.ToString());
}
}
在你的剃刀里:
@Html.CustomComponent(questionModelObject)