2015-11-30 2 views
0

В моем приложении MVC у меня есть форма, которую я хочу отправить данные на несколько таблиц. Мне было интересно, как я могу это достичь? Вот код для моего контроллера, а также код для моего просмотра.Опубликовать данные для нескольких таблиц MVC EF6

Контроллер

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include = "id_index,createddate,details,options")] tbl_info tbl_info) 
    { 
     if (ModelState.IsValid) 
     { 
      db.tbl_info.Add(tbl_info); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(tbl_info); 
    } 

Просмотр

@using (Html.BeginForm()) 
{@Html.AntiForgeryToken() 

<div class="form-horizontal"> 
    <h4>The Form</h4> 
    <hr /> 
    @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
    <div class="form-group"> 
     @Html.LabelFor(model => model.createddate, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.createddate, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.createddate, "", new { @class = "text-danger" }) 
     </div> 
    </div> 
    <div class="form-group"> 
     @Html.LabelFor(model => model.details, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.TextAreaFor(model => model.details, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.details, "", new { @class = "text-danger" }) 
     </div> 
    </div> 
    <div class="form-group"> 
     @Html.LabelFor(model => model.options, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.TextAreaFor(model => model.options, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.options, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

Пользователь может добавить много вариантов (входные параметры могут быть клонированы с помощью JQuery), и мне нужно те варианты, которые будут размещены в отдельной таблице, которая имеет от одного до многих отношений с tbl_info. Кто-нибудь знает, как это можно сделать?

ответ

0

Ваши модели должны быть установки что-то вроде этого:

public class tbl_info 
{ 
    public int tbl_infoID {get; set;} 
    public string details {get; set;} 
    etc ... 

    public virtual ICollection<tbl_options> Options {get; set;} 
} 

public class tbl_options 
{ 
    public int id {get; set;} 
    public int tbl_infoID {get; set;} 
    public string option_value {get; set;} 
} 

Тогда по вашему мнению, вы должны назвать каждый вариант как Model.Options [0] .option_value. Вы должны увеличить [0]; [0], [1] и т. Д. Вы не должны пропускать любые числа, и ему нужно начинать с 0, поэтому MVC может связывать ваши объекты формы с вашей моделью.

<div class="form-group"> 
    @Html.LabelFor(model => model.options, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.TextAreaFor(model => model.Options[0].option_value, new { htmlAttributes = new { @class = "form-control" } }) 
     @Html.ValidationMessageFor(model => model.Options[0].option_value, "", new { @class = "text-danger" }) 
    </div> 
</div> 

<div class="form-group"> 
    @Html.LabelFor(model => model.options, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.TextAreaFor(model => model.Options[1].option_value, new { htmlAttributes = new { @class = "form-control" } }) 
     @Html.ValidationMessageFor(model => model.Options[1].option_value, "", new { @class = "text-danger" }) 
    </div> 
</div> 

**** Редактировать

Ваш контроллер должен выглядеть примерно так:

[HttpPost] 
public ActionResult Create(tbl_info myModel) 
{ 
    if (ModelState.IsValid) 
    { 
    db.tbl_info.Add(myModel); 
    db.SaveChanges(); 
    return RedirectToAction("Index"); 
    } 
    return View(myModel); 
} 
+0

Спасибо за ваш ответ. Как контроллер справится с этим? – Yanayaya

+0

Очень похоже на ваш исходный код, см. Мое редактирование. –

+0

Благодарим за ответ. Если я добавлю это в свой код, я получу ошибку в своем представлении: Не могу применить индексирование с [] к выражению типа «System.Collections.Generic.ICollection Я пытался сменить ICollection на IList, это исправляет ошибку, однако, когда я отправьте мою форму, данные фактически не отправляются в базу данных. – Yanayaya

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