指定TModel&时出错TextBoxFor的TProperty

时间:2010-12-29 11:47:19

标签: asp.net-mvc asp.net-mvc-2 html-helper

我运行Items集合并想要构建TextBox但是我收到以下错误:

'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

我认为我的匿名功能是错误的,但为什么呢? 请帮帮我

SocialNetworkModel类

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>

谢谢

1 个答案:

答案 0 :(得分:0)

试试这样:

<% 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) %>
    <% } %>
<% } %>

或者甚至更好地使用编辑器模板,因为您不再需要在视图中编写任何循环,所以它更加清晰:

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

然后定义编辑器模板(~/Views/Shared/EditorTemplates/SocialNetworkItem.ascx

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