2014-05-09 3 views
0

Я пытаюсь отправить элемент в коллекцию, принадлежащую другой модели. Это форма в виде:Добавление элемента в виртуальную коллекцию ASP.NET MVC

@using (Html.BeginForm("Create", "Comment", FormMethod.Post, new { enctype = "multipart/form-data", encoding = "multipart/form-data" })) 
      { 
       @Html.AntiForgeryToken() 
       <div class="modal-body"> 
        <div class="form-horizontal"> 
         <input type="hidden" value="@Model.DeviceID" /> 
         <div class="form-group"> 
          <h5>Your name</h5> 
          <div class="col-md-10"> 
           <input name="Author" /> 
          </div> 
         </div> 
         <div class="form-group"> 
          <h5>Comment</h5> 
          <div class="col-md-10"> 
           <textarea name="Comment"></textarea> 
          </div> 
         </div> 
        </div> 
       </div> 
       <div class="modal-footer"> 

        <input type="submit" class="btn btn-primary" value="Submit" /> <!--Next</input>--> 
       </div> 
      } 

и код контроллера устанавливается следующим образом

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create(string returnUrl, int devID, string Author, string text) 
    { 
     string url = this.Request.UrlReferrer.AbsolutePath; 

     Comment comment = new Comment(); 

     if (ModelState.IsValid) 
     { 
      //db.Comments.Add(comment); 
      db.SaveChanges(); 
      return Redirect(url); 
     } 
     return Redirect(url); 
    } 

Однако это не работает, потому что я наклоняю установить модель идентификатор элемента, который становится размещен ,

Что такое способ MVC Asp.net для добавления в виртуальную коллекцию, которой владеет модель?

+1

Откуда берутся все эти параметры для вашего действия Create? Автор является единственным, у которого есть соответствующее текстовое поле в вашей форме. Я вижу, что вы устанавливаете DeviceId на скрытый ввод, но у него даже нет имени. –

+0

У меня была такая же проблема некоторое время назад. В конце концов я положил ID в видимый вход для чтения, который был расположен там, где пользователь не может его увидеть. Невозможно вспомнить, был ли он размещен «снаружи» на экране или просто за другим элементом. Это уродливое решение, но делает работу. Это тоже небезопасно, но это были администраторы page.anyway. –

ответ

1

Я заметил, что имена не совпадают с вашим контроллером. Таким образом, вы не получите его хорошо. Изменить первую строку:

<input name="Author" /> and <textarea name="Comment"></textarea> 

по:

<input name="author" /> and <textarea name="comments"></textarea> 

Не могли бы вы изменить параметры, чтобы соответствовать имени с точки зрения.

public ActionResult Create(string returnUrl, int DeviceID, string author, string comments) 
{ 
    string url = this.Request.UrlReferrer.AbsolutePath; 

    Comment myComment = new Comment(); 
    comment.DeviceID = DeviceID; 
    comment.Author = author; 
    comment.Comments= comments;// I presume your Comment class has thoses properties if not you can see at least the way you can deal with that 
    if (ModelState.IsValid) 
    { 
     db.Comments.Add(myComment); 
     db.SaveChanges(); 
     return Redirect(url); 
    } 
    return Redirect(url); 
} 

Надеюсь, это поможет. Если вы можете показать код своей модели Comment, поэтому я могу ее отредактировать, если это необходимо.

+0

Это выглядит правильно, хотя я думал, что есть способ сделать это с помощниками Asp.net, такими как Html.EditorFor() и т. Д. Кто-то думает, что я не уверен, что это DeviceID. У меня есть виртуальная коллекция для устройства: 'public virtual ICollection Комментарии {get; задавать; } 'и Device_ID не отображается на отдельном экземпляре комментария, поэтому comment.Device_ID не будет работать. – bischoffingston

+0

Nevermind Я добавил его к моей модели, и он появился на intellisense, Еще раз спасибо за ответ – bischoffingston

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