【问题标题】:How to programmatically create textbox based on mvc view model object?如何基于 mvc 视图模型对象以编程方式创建文本框?
【发布时间】:2018-08-15 16:18:29
【问题描述】:

有没有一种方法可以基于视图模型对象以编程方式创建文本框?让我详细说明。以密码等标准 ViewModel 对象为例。

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]

【问题讨论】:

  • 不确定你在问什么。您已经以编程方式设置了属性(也就是通过注释)。您是否在问如何 render - 例如@Html.PasswordFor?

标签: .net asp.net-mvc textbox data-annotations


【解决方案1】:

不得不这样做是不寻常的,但还是有可能的。

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

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

如你所见,里面有一个NullObjectView类,如下:

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);

这将返回一个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">

【讨论】:

  • 谢谢,这对我遇到的奇怪场景有很大帮助!您的解决方案效果很好!感谢您抽出宝贵时间提供帮助。
猜你喜欢
  • 2021-10-11
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多