asp.net-mvc-2
2011-02-26 80 views 0 likes 
0

我怎樣才能添加到所有的文本框,在所有的aspx網站,如:如何覆蓋所有Html.TextBox - ascx未被調用!爲什麼?

<%: Html.TextBoxFor(model => model.Firstname, new { style = "float: left; width: 4.1em;", maxlength = "4" })%> 

javascript函數沒有尋找他們,並手動添加類似:

new { onkeyup='Foo(this); return false;' } 

想法:寫一個ascx像下面一!

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> 
<%: Html.TextBox( string.Empty, 
        ViewData.TemplateInfo.FormattedModelValue, 
        new { onkeyup = "foo(this); return false;" })%> 

,請告訴我們說這ascx被命名爲Test.ascx
,它存儲在\Views\Shared\EditorTemplates\

我的問題是「Test.ascx」沒有被調用。
爲什麼?
是否必須將一個引用添加到所有aspx網站?
在遺失遺失中是否有< System.String>

任何幫助都可以。

非常感謝您提前。

回答

1

爲了使您的自定義編輯模板被稱爲你需要使用:

<%= Html.EditorFor(model => model.Firstname) %> 

,而不是:

<%= Html.TextBoxFor(model => model.Firstname, new { style = "float: left; width: 4.1em;", maxlength = "4" })%> 

使用Html.TextBoxFor你明確地硬編碼這個值和你想要一個<input type="text" ...,你不能覆蓋或替換它。這就是爲什麼最好使用Html.EditorFor的原因,因爲它允許您通過在Views\Shared\EditorTemplates文件夾中定義自定義模板來修改其渲染方式。現在

如果您編輯模板被稱爲:Test.ascx你可以調用它是這樣的:

<%= Html.EditorFor(model => model.Firstname, "Test") %> 

或通過與[UIHint]屬性裝飾你的視圖模型屬性:

[UIHint("Test")] 
public string Firstname { get; set; } 

,然後只需:

<%= Html.EditorFor(model => model.Firstname) %> 
+0

完美!感謝一百萬的解釋!我試過了,現在調用Test.ascx,我可以在那裏添加js/jquery函數。但是原始屬性new {style =「float:left; width:4.1em;」,maxlength =「4」}會丟失!我會爲此創建一個新問題!但你真的幫了我很多!謝謝! – user415876 2011-02-27 18:50:57

+0

http://stackoverflow.com/questions/5135210/how-to-avoid-that-an-ascx-tempalte-overwrites-the-original-style-class-maxlengt – user415876 2011-02-27 19:05:13

相關問題