2014-02-21 5 views
0

У меня есть представление для отображения ресторана. В этом представлении внизу страницы я хочу отобразить форму комментариев, чтобы добавить комментарии к этому Ресторану.Как отобразить форму создания в существующем представлении MVC 4 и C#

Может кто-то, пожалуйста, помогите мне сделать это, используя MVC 4 & C#.

Мои модели имеет followign две таблицы:

/Classifieds TABLE 
public class Classifieds 
{ 
    [Key] 
    public string C_Unique_Id { get; set; } 

    public string AdType { get; set; } 

    public string Title { get; set; } 

    public string Description { get; set; } 

}

//ClassifiedsComments TABLE 
public class ClassifiedsComments 
    { 
     [Key] 
     public string CCommentsUniqueId { get; set; } 

     public string CommentAuthor { get; set; } 

     public string Comment { get; set; } 

     [ForeignKey("Classifieds")] 
     public string C_Unique_Id { get; set; } //this is the foreign key of Classified record 
     public virtual Classifieds Classifieds { get; set; } 
    } 

Объявления Подробнее вид:

@model SomeIndianShit.Models.Classifieds 

@{ 
    ViewBag.Title = "Details"; 
} 

       <table class="recordDetailsDisplayTableStype"> 
        <tr> 
         <td colspan="2" align="left"> 
          @Html.DisplayFor(model => model.Description) 
          <br /><br /> 
         </td> 
        </tr> 

        <tr> 
         <td> 
          Ad Type 
         </td> 
         <td align="left"> : 
          @Html.DisplayFor(model => model.AdType) 
         </td> 
        </tr> 

        SOME OTHER FIELDS DISPLAY HERE 
       </table> 


//Here I want to display "ClassifiedsComments" form to add comments to above Classified. 
//HOW can I display the ClassifiedsComments create.cshtml code here?? 

ответ

0

Для отображения данных в целях создания вида модели, но выразить свое мнение, не использовать модель:

public class ClassifiedsViewModel 
{ 
    public ClassifiedsViewModel() 
    { 
    Comments = new List<ClassifiedsComments>(); 
    } 

    public Classifieds Classifieds { get; set; } 
    public List<ClassifiedsComments> Comments { get; set; } 
} 

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

if(Model != null && Model.Classifieds != null) 
{ 
    <table> ...display details.. </table> 
} 

if(Model != null && Model.Comments != null) 
{ 
    <table> ...display comments with foreach loop.. </table> 
} 

И снизу, создать комментарий после форму

@using (Html.BeginForm("SaveComment", "Controller", FormMethod.Post,         new { enctype = "multipart/form-data" })) 
{ 

    //set to which Classifieds will this comment posted 
    @Html.Hidden("C_Unique_Id", Model.Classifieds.C_Unique_Id) 

    <fieldset> 
     @Html.TextBox("Comment") 

     //other fields .... 

     <input type="submit" value="Save" /> 
    </fieldset> 
} 

Edit2: Просмотр создания модели:

public ActionResult Details(int id) 
{ 
    //add breakpoint here and follow any step. 

    ClassifiedsViewModel viewModel = new ClassifiedsViewModel(); 
    viewModel.Classifieds = db.Classifieds.Find(id); 
    viewModel.Comments = db.LoadCommentsByClassifiedsId(id); //create db method 
    // or instead of this line use: 
    viewModel.Comments = db.ClassifiedsComments.Where(e => e.C_Unique_Id == id).ToList(); 

    return(viewModel); 
} 
+0

вид прекрасен, но сообщение об ошибке отображается для метода Get Details в контроллере. ДЕЙСТВИТЕЛЬНО ИСПОЛЬЗОВАТЬ объявления Объявления = db.Classifieds.Find (id); или объявления AdsViewModelViewModel = db.ClassifiedsViewModel.Find (id); – Reddy

+0

Если я использую Объявления AdsViewModelViewModel = db.ClassifiedsViewModel.Find (id); и найдите элементы в виде Details как Model.Classifieds.C_Unique_Id === отображается пустая страница – Reddy

+0

Если я использую Объявления ads = db.Classifieds.Find (id); in Подробный метод в контроллере, сообщение об ошибке отображается как «Элемент модели, переданный в словарь, имеет тип« SomeIndianShit.Models.Classifieds », но для этого словаря требуется элемент модели типа« SomeIndianShit.Models.ClassifiedsViewModel ».» – Reddy

1

Попробуйте это:

С Видом:

@using (Html.BeginForm("Classifieds", "ClassifiedsDetails", FormMethod.Post)) 

и

@using (Html.BeginForm("ClassifiedsComments", "ClassifiedsDetails", FormMethod.Post)) 

и использовать 1 Модель для этого:

public class ClassifiedsDetails 
{ 
    public Classifieds Model1{ get; set; } 

    public ClassifiedsComments Model2{ get; set; } 
} 

Update:

public class ClassifiedsDetails 
{ 
    public ClassifiedsDetails() 
    { 
     Model1 = new Classifieds(); 
     Model2 = new ClassifiedsComments(); 
    } 
    public Classifieds Model1{ get; set; } 
    public ClassifiedsComments Model2{ get; set; } 
} 

public class Classifieds 
{ 
    public Classifieds() 
    { 
    C_Unique_Id = String.Emty; 
    AdType = String.Emty; 
    //---- Add default setting here------ 
    } 
    [Key] 
    public string C_Unique_Id { get; set; } 

    public string AdType { get; set; } 

    public string Title { get; set; } 

    public string Description { get; set; } 
} 

или отображения списка комментариев в View с Model:

public class ClassifiedsDetails 
    { 
     public ClassifiedsDetails() 
     { 
      Model1 = new Classifieds(); 
      Model2 = new List<ClassifiedsComments>(); 
     } 
     public Classifieds Model1{ get; set; } 
     public List<ClassifiedsComments> Model2{ get; set; } 
    } 

Вид:

@model ClassifiedsDetails 

@Html.LabelFor(model => model.Model1.Title) 

@foreach (var items in Model.Model2) 
{ 
    @item. //fields 
} 
+0

я добавил так же, как описано выше, но в моем объекте контроллера Index подходит в качестве НОЛЬ.GET:/Объявления/Подробнее/5 public ActionResult Details (строка id = null) { ОбъявленияДобавлено объявление объявлений = db.ClassifiedsDetails.Find (id); – Reddy

+0

В приведенном выше комментарии объявления появляются как NULL – Reddy

+1

Я думаю, что при использовании модели вам нужно объявить конструктор, это позволит исключить NULL или использовать ModelBinder с моим ответом: http://stackoverflow.com/questions/16046178/how -to-deal-with-many-possible-values-to-make-a-query/16053763 # 16053763 – LazyCatIT

0

Вы можете добавить ViewModel как этот

public class ClassifiedsDetailViewModel 
{ 
    public ClassifiedsDetailViewModel() 
    { 
     ClassifiedsComments = new ClassifiedsComments(); 
    } 

    public Classifieds Classifieds { get; set; } 
    public ClassifiedsComments ClassifiedsComments { get; set; } 
} 

Пасс эту точку зрения модели на ваш взгляд а затем добавьте @ Html.Partial ("_ CreateClassifiedsCommentsFormPartial", Model.ClassifiedComments) под таблицей. И в вашем частичном представлении вы можете использовать Html.BeginForm или Ajax.BeginForm. See sample here

+0

Сообщение об ошибке отображается как «Элемент модели, переданный в словарь, имеет тип« xyz.Models.Classifieds », но для этого словаря требуется элемент модели типа« xyz.Models.ClassifiedsComments », «. Вот что я сделал: -Добавлена ​​@ Html.Partial ("_ CreateClassifiedsCommentsFormPartial") в Объявления зрения – Reddy

+0

Добавить это в Объявления классе ... общественного ICollection ClassifiedsComments {получить; задавать; } затем замените @ Html.Partial ("_ CreateClassifiedsCommentsFormPartial") с помощью @ Html.Partial ("_ CreateClassifiedsCommentsFormPartial", Model.ClassifiedsComments) – drunkcoder

+0

Класс объявления означает Детали объявления Контроллер или класс модели? – Reddy