2010-12-29 7 views
0

Angabe Ich laufe über Sammlung Artikel und wollen TextBox bauen, aber ich bekomme die folgende Fehlermeldung:Fehler beim TModel & TProperty für TextBoxFor

'System.Web.Mvc.HtmlHelper<Web.Module>' does not contain a definition for 
'TextBoxFor' and the best extension method overload 
'System.Web.Mvc.Html.InputExtenstions.TextBoxFor<TModel,TProperty>System.Web.Mvc.HtmlHelper<TModel>,System.Linq.Expressions.Expression<System.Func<TModel, TProperty>>)' has some invalid arguments 

Ich glaube, meine anonyme Funktion falsch ist, aber warum? Bitte helfen Sie mir

SocialNetworkModel Klasse

public class SocialNetworkModel : IViewModel 
{ 
    #region Properties 
    public List<SocialNetworkItem> Items { get; set; } 
    #endregion 

    public SocialNetworkModel(string param) 
    { 
     this.Create(param); 
    } 
    /// <summary> 
    /// DO NOT DELETE: default .ctor is used when binding posted data, from client, back to the model 
    /// </summary> 
    public SocialNetworkModel() { } 
    public void Create(string param) 
    { 
     Items = new List<SocialNetworkItem>(); 
     foreach(var item in Customer.Current.GetSocialNetworkList()) 
     { 
      Items.Add(new SocialNetworkItem 
      { 
       CodeName = item.CodeName, 
       Link = item.Link, 
       UserName = item.UserName, 
       Password = item.Password 
      }); 
     } 
    } 
} 
public class SocialNetworkItem 
{ 
    #region Properties 
    [LocalizedDisplayName("CodeName", NameResourceType = typeof(Resources.Views.SocialNetwork))] 
    public string CodeName { get; set; } 
    [LocalizedDisplayName("Link", NameResourceType = typeof(Resources.Views.SocialNetwork))] 
    public string Link { get; set; } 
    [LocalizedDisplayName("UserName", NameResourceType = typeof(Resources.Views.SocialNetwork))] 
    public string UserName { get; set; } 
    [LocalizedDisplayName("Password", NameResourceType = typeof(Resources.Views.SocialNetwork))] 
    public string Password { get; set; } 
    #endregion 
} 

Viewusercontrol

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Module>" %> 
<% var model = Model.Model as SocialNetworkModel; %> 

<div id="social-network-container"> 
<div id="social-network"> 
    <% using (Ajax.BeginForm(Model.CodeName + "FormPost", "Customer", null, new AjaxOptions() { HttpMethod = "POST" }, new { @class = "form-container" })) 
     { %> 
      <%model.Items.ForEach(item => { %>     
       <%: Html.TextBoxFor<SocialNetworkItem, string>(s => item.Link)%> 
      <%}); %> 
     <% }%> 
</div> 

Danke

Antwort

0

wie Try this:

<% using (Ajax.BeginForm(Model.CodeName + "FormPost", "Customer", null, new AjaxOptions() { HttpMethod = "POST" }, new { @class = "form-container" })) { %> 
    <% foreach(var item in model.Items) { %> 
     <%: Html.TextBoxFor(x => item.Link) %> 
    <% } %> 
<% } %> 

Oder besser noch eine Editor-Vorlage verwenden, die viel sauberer als Sie nicht mehr in Schlaufen Ansicht schreiben müssen:

<% using (Ajax.BeginForm(Model.CodeName + "FormPost", "Customer", null, new AjaxOptions() { HttpMethod = "POST" }, new { @class = "form-container" })) { %> 
    <%= Html.EditorFor(x => x.Items) %> 
<% } %> 

und dann die Editor-Vorlage definieren (~/Views/Shared/EditorTemplates/SocialNetworkItem.ascx)

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<SocialNetworkItem>" %> 
<%: Html.TextBoxFor(x => x.Link) %>