主要问题:在MVC2解决方案/项目中添加所有(!)文本框js / jquery方法。
基础知识:如何调用ascx模板?
Solved, see here
(感谢Darin Dimitrov!)
BUT ...
表示将调用ascx模板“Test.ascx”,如下所示:
<%: Html.EditorFor(model => model.Firstname, "Test", new { style = "float: left; width: 4.1em;", maxlength = "4" })%>
“Test.ascx”模板添加了js / jquery函数
工作正常,np如此票价
但是:“原始”属性style="..." maxlength="..."
将被丢失/覆盖。
我当前的解决方案/我的“Test.ascx”文件:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<input type="text"
id="<%: ViewData.TemplateInfo.GetFullHtmlFieldId(string.Empty) %>"
name="<%: ViewData.TemplateInfo.HtmlFieldPrefix %>"
value="<%: ViewData.TemplateInfo.FormattedModelValue %>"
style="<%: ViewData["style"] %>"
class="<%: ViewData["class"] %>"
maxlength="<%: ViewData["maxlength"] %>"
onkeyup="Foo(this); return false;"/>
这种方法非常好,并且可以完美地返回/渲染它:
<input type="text"
id="Firstname"
name="Firstname"
value=""
style="float: left; width: 4.1em;"
class=""
maxlength="4"
onkeyup="Foo(this); return false;"/>
请注意,style="..."
和maxlength="..."
属性处理得很好!
我目前使用“标准”< input ... />
标记,因为我没有让它工作:
<%
String tmpConfig = " new {onkeyup=\"Foo(this); return false;\"";
String style = this.ViewData["style"] as String;
if (!String.IsNullOrEmpty(style))
tmpConfig += ", style=\"" + style + "\"";
String @class = this.ViewData["class"] as String;
if (!String.IsNullOrEmpty(@class))
tmpConfig += ", class=\"" + @class + "\"";
String maxlength = this.ViewData["maxlength"] as String;
if (!String.IsNullOrEmpty(maxlength))
tmpConfig += ", maxlength=\"" + maxlength + "\"";
tmpConfig += " } ";
%>
<!-- doesnt work: -->
<%: Html.TextBox( string.Empty,
ViewData.TemplateInfo.FormattedModelValue,
// new { onkeyup = "Foo(this); return false;" } // the style, class, maxlength attributes will be lost / not rendered!
// new { tmpConfig } // result would be the attribut: tempConfig=" onkeyup..."
// new tmpConfig // result: error, tmpConfig isnt object
Html.Encode(tmpConfig) // doesnt work ...
)%>
这最终呈现相同但没有style="..."
和maxlength="..."
属性!
但我想使用<%: Html.TextBox(...) %>
代替< input ... />
代码!
因为这样我就可以避免出现像class=""
这样的空属性。
我的错误在哪里?
答案 0 :(得分:1)
您必须为Html.TextBox提供String,Object字典以保存所有属性
<%
var dict = new Dictionary<string, object>();
String style = this.ViewData["style"] as String;
if (!String.IsNullOrEmpty(style))
dict.Add("style", style);
String @class = this.ViewData["class"] as String;
if (!String.IsNullOrEmpty(@class))
dict.Add("class", @class);
String maxlength = this.ViewData["maxlength"] as String;
if (!String.IsNullOrEmpty(maxlength))
dict.Add("maxlength", maxlength);
dict.Add("onkeyup", "Foo(this); return false;");
%>
<%: Html.TextBox( string.Empty,
ViewData.TemplateInfo.FormattedModelValue,
dict
)%>