如何以编程方式基于 mvc 视图模型对象创建文本框?

How to programmatically create textbox based on mvc view model object?

有没有办法以编程方式创建基于视图模型对象的文本框?让我详细说明。例如,一个标准的 ViewModel 对象,如 password.

public class PassWordViewModel
{
    [DataType(DataType.Password)]
    [MaxLength(10)]
    public string Password { get; set; }
}

现在以编程方式构建的文本框控件为例:

TextBox textBox = new TextBox();
textBox.TextMode = TextBoxMode.Password;
textBox.MaxLength = 10;

如何以编程方式创建一个文本框,其中包含在我的模型对象上设置的所有属性?

TextBox textBox = [CREATE TEXTBOX FROM MY PASSWORD 
VIEWMODEL OBJECT CONTAINING ALL THE DATA ANNOTATED 
PROPERTIES]

这种情况很少见,但还是有可能的。

您首先需要在您的控制器中创建一个 HtmlHelper<PasswordViewModel> 的实例:

var viewContext = new ViewContext(ControllerContext, new NullObjectView(), ViewData, TempData, TextWriter.Null);
var helper = new HtmlHelper<PassWordViewModel>(viewContext, new ViewPage());

可以看到,里面有一个NullObjectView class,如下:

public class NullObjectView : IView
{
    public void Render(ViewContext viewContext, TextWriter writer)
    {

    }
}

然后使用 System.Web.Mvc.Html.InputExtensions.TextBoxFor():

创建文本框
var textbox = InputExtensions.TextBoxFor(helper, x => x.Password);

这个 returns 一个 MvcHtmlString,它将包含以下内容的完整文本框输出:

<input data-val="true" data-val-maxlength="The field Password must be a string or array type with a maximum length of '10'." data-val-maxlength-max="10" id="Password" name="Password" value="" type="text">