как создать несколько текстовых полей со списком объектов - PullRequest
0 голосов
/ 22 марта 2012

Привет, ребята, мне нужно создать страницу с общим ресурсом, на которой я хочу поделиться контентом, пользователь, который делится им, и получатели списка пользователей, с которым он хочет поделиться, но я хочу сделать это динамически, это моймодель домена

public class ShareContentItemModel : BaseModel
{
    public ContentItem ContentItem { get; set; }
    public User User { get; set;}

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

    [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:")]
    public string Email { get; set;}
}

и это мое мнение

 @using (Html.BeginForm("Submit", "Contact", FormMethod.Post))
 { 
 <p>Hi: @Html.DisplayTextFor(m=>m.User.Salutation) @Html.DisplayTextFor(m=>m.User.Firstname) @Html.DisplayTextFor(m=>m.User.Lastname)</p>            
<table border="0" style="padding:5">
    <tr>
        <td class="editor-label">@Html.LabelFor(m => m.ContentItem.Title): </td>
        <td class="editor-field">@Html.DisplayTextFor(m => m.ContentItem.Title)
            <div>@Html.ValidationMessageFor(m => m.ContentItem.Title)</div>  
        </td>
    </tr>
    <tr> 
        <td class="editor-label">@Html.LabelFor(m => m.ContentItem.Description): </td>
        <td class="editor-field">@Html.DisplayTextFor(m => m.ContentItem.Description)
            <div>@Html.ValidationMessageFor(m => m.ContentItem.Title)</div>  
        </td>
    </tr>
    <tr><td colspan="2">Recipients:</td></tr>
    @foreach (var item in @Model.Recipients)
    {
    <tr>
        <td>@item.Name: @Html.TextBoxFor(/*Dont know what to put in here*/)</td>
        <td>@item.Email: @Html.TextBoxFor(/*Dont know what to put in here*/) </td>
    </tr>    
    }
    <tr>
        <td>   <a class="small button" href="#">Add Recipient:</a> </td>
        <td><input type="submit" class="button med primary" style="float: right;" value="ABSENDEN" /></td>
    </tr>
</table>

 }   

, как вы можете видеть в // Не знаю, что здесь вставить, я не могу использовать item.name или item.Свойства электронной почты, вы можете помочь мне с этим

pd, объект в порядке, cshtml прекрасно рендерит, мне просто нужно создать эти текстовые поля, чтобы начать создавать больше получателей.*

1 Ответ

3 голосов
/ 22 марта 2012

OK.Итак, вот как вы это делаете.Вы создаете шаблон редактора и используете его.

Шаг 1) Создайте папку с именем "EditorTemplates" в вашем View / yourViewFolderName

Шаг 2) Создать представление с именем Receipent.cshtml

enter image description here

Добавить этот код в этот файл

@model YourNameSpace.Models.Recipient
<p>
   @Html.EditorFor(x=>x.Name) : @Html.TextBoxFor(x=>x.Name)
</p>
<p>
   @Html.EditorFor(x=>x.Email) : @Html.TextBoxFor(x => x.Email)
</p>

Шаг 3) В главном представлении просто вызовите шаблон редактора вместо кода цикла foreach

@Html.EditorFor(x=>x.Recipients)

Это должно работать нормально.Я проверял ваши модели.

Сохраняйте имя шаблона редактора таким же, как и у вашего свойства, которое вы хотите показать в foreach.MVC позаботится обо всем остальном.

...