2016-11-10 4 views
-1

Я использую Code-First EF. Упрощенная версия модели:Создание нескольких моделей в ASP.Net MVC

public class Person 
{ 
    public int PersonID { get; set; } 

    public string Name { get; set; } 

    public List<Phone> Phones { get; set; } 
} 
public class Phone 
{ 
    public int PhoneID { get; set; } 

    public string Number { get; set; } 

    public virtual Person Person{ get; set; } 

    public int PersonID { get; set; } 
} 

Так у меня есть один ко многим отношений между Людьми и телефоном.

Я хотел бы включить пользователя, чтобы добавить как можно больше телефонов в представление для человека. Когда будет отправлена ​​форма в этом представлении, я бы сохранил как человека, так и все добавленные телефоны.

Может ли кто-нибудь указать мне правильное направление? Я читал о шаблонах редактора - это правильный вариант использования?

+1

может быть дубликат http://stackoverflow.com/questions/33190604/how-to-insert-to-master-detail-tables-in-asp-net-mvc-5 Как вставить таблицы основных деталей в mvc 5 – silverfighter

+0

, вероятно, всего лишь некоторый javascript, когда они нажимают кнопку '+', добавляют еще один элемент ввода в форму. – Jonesopolis

+0

У меня есть эта часть, это больше похоже на то, что они ввели в добавленный ввод и сохранили его в db, что является моим вопросом. Спасибо хоть! – bak

ответ

0

вы можете использовать ViewModel как этот

public class PersonAddViewModel 
{ 
    public string Name{set;get;} 
    public List<string> Phones{set;get;} 
} 

на форме вашего зрения, вы можете добавить этот код

@using (Html.BeginForm("Add", "Person", FormMethod.Post })) 
{ 
    <div class="col-md-6"> 
     <div class="form-group"> 
      @Html.LabelFor(p => p.Name) 
      @Html.EditorFor(p => p.Name, new { @class = "form-control" }) 
     </div> 
    </div> 
    <div class="col-md-6" id="#row-0"> 
     <div class="form-group"> 
      @Html.LabelFor(p => p.Phones[0]) 
      @Html.EditorFor(p => p.Phones[0], new { @class = "form-control" }) 
     </div> 
    </div> 
    <div id=OtherPhones></div> 
    <button type="button" class="btn btn-danger btn-float btn-float-lg btn-  rounded" id="add"><i class="icon-plus2"></i></button> 
    <button type=submit>Submit</button> 
} 

затем добавить Jquery скрипт на страницу

$("#add").click(function() { 

inputCount++; 

var newDiv = $("#row-0").clone(); 
newDiv.attr('id', 'row-' + inputCount); 

newDiv.find("input,select").each(function() { 
    $(this).attr({ 
     'name': function (_, name) { return name.toString().replace('0', inputCount) }, 
     'id': function (_, id) { return id.toString().replace('0', inputCount) }, 
     'item': function (_, item) { return item.toString().replace('0', inputCount) } 
    }); 

    var type = $(this).attr('type'); 
    if (type === 'hidden') { 

     $(this).val('0'); 
    } else { 
     $(this).val(''); 
    } 
}); 

newDiv.find(".available").each(function() { 
    $(this).attr({ 
     'id': function (_, id) { return id.toString().replace('0', inputCount) } 
    }); 

}); 

newDiv.find(".delCol").each(function() { 
    $(this).find('button').attr('item', inputCount); 
    $(this).fadeIn(); 
}); 

newDiv.find("label").each(function() { 
    $(this).attr({ 
     'for': function (_, id) { return id.toString().replace('0', inputCount) } 
    }); 
}); 

newDiv.find(".field-validation-valid").each(function() { 
    $(this).attr({ 
     'data-valmsg-for': function (_, id) { return id.toString().replace('0', inputCount) } 
    }); 
}).end(); 

$("#Other").append(newDiv); 

$('form').data('validator', null); 
$.validator.unobtrusive.parse('form'); 

});

Смежные вопросы