后调用中的编辑器模板未正确传递模型

时间:2012-03-23 12:49:45

标签: asp.net-mvc razor

Hi Folks有人在2天前帮助我一个解决方案,使用编辑器模板使用razor从域模型中的列表生成多个文本框,然后我放了一些js,使它更具动态性,但是当我调用控制器中的action方法,它不刷新文本字段中的值,我会在这里放一些代码,也许你知道问题是什么。

这是我想要实现的目标 a form to send messages up to ten recipients

//AntiBot Field
    public string Customer { get; set; }

    public int ContentItemId { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }

    public int UserId { get; set; }
    public string Salutation { get; set; }
    public string Firstname { get; set; }
    public string Lastname { get; set; }
    public string Email { get; set; }


    [Display(Name = "Recipients")]
    public List<Recipient> Recipients { get  
                                            { return new List<Recipient> 
                                                {
                                                    new Recipient { Name = "", Email = "" },                                                        
                                                    //x10
                                                }; 
                                             } 
                                      }

    [Required]
    [Display(Name = "Nachricht")]
    public string Message { get; set; }
}

public class Recipient{
    [Display(Name = "Recipient Name:")]
    public string Name  { get; set;}

    [Display(Name = "Recipient Email Address:")]
    [DataType(DataType.EmailAddress)]
    public string Email { get; set;}
}

此输入字段中的每一个都具有此属性 所以我有十个字段,每个字段都有一个ID Recipient_(1_10)_Name / Email

这是我的观点

@using (Html.BeginForm("Submit", "Share"))
 { 
     @Html.AntiForgeryToken() 
     @Html.HiddenFor(m => m.UserId)
     @Html.HiddenFor(m => m.ContentItemId)
     @Html.TextBoxFor(m => m.Customer, new { @class = "b2a534d1" })        
     <p>Hi: @Html.DisplayTextFor(m => m.Salutation) @Html.DisplayTextFor(m => m.Firstname) @Html.DisplayTextFor(m => m.Lastname)</p>            
     <table border="0" style="padding:5">
        <tr>
            <td class="editor-label">@Html.LabelFor(m => m.Title): </td>
            <td class="editor-field">@Html.DisplayTextFor(m => m.Title)

            </td>
        </tr>
        <tr> 
            <td class="editor-label">@Html.LabelFor(m => m.Description): </td>
            <td class="editor-field">@Html.DisplayTextFor(m => m.Description)

            </td>
        </tr>
        <tr>
            <td>@Html.LabelFor(m => m.Message)</td>
            <td>@Html.TextAreaFor(m => m.Message)</td>
        </tr>             
        </table>
        <table >                       
            @Html.EditorFor(m => m.Recipients)
        </table>
        <table>                   
            <tr>
                <td>
                    <a href="#" id="add-recipient" class="small button">Add Recipient</a></td>            
                <td><input type="submit" class="button med primary" style="float: right;" value="ABSENDEN" /></td>
            </tr>
        </table>      
 }    

这是我的收件人

@model PetterLetter.Application.Models.Recipient


<p class="recipient"> Name: @Html.EditorFor(x=>x.Name) Email: @Html.EditorFor(x => x.Email) </p>

在调试解决方案之后,这就是我从视图模型中得到的结果。

enter image description here

此收件人应该在编辑器模板的输入字段中输入值

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我遇到了动态加载表单的类似问题,可以从Phil Haack's post.收集解决方案

结果是,当您加载多个这些表单时,必须为它们分配不同的索引值(每次都不是[0])。

我通过使用集合索引的隐藏字段并为其分配唯一值来解决此问题。它可以是任何实际的东西,比如日期时间字符串,只要索引值也用在每个输入名称中。阅读链接的帖子,特别是非顺序索引部分。