1

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

Частичный вид будет иметь форму, которая создает запись в хранилище данных и отображает сохраненные данные под этой формой. Итак, после отправки формы я увижу свою запись в сетке, подобной структуре, в форме без переключения родительского представления. Если модель недействительна, будет также показана ошибка. Трюк здесь в том, как я могу остаться на моей текущей странице без создания действия В контроллере каждого представления, которое показывает частичный вид?

Я буду использовать этот частичный вид в виде 10 разных родительских представлений.

Ниже я предоставляю некоторые коды, которые помогут сообществу точно понять вопрос.

Как мне настроить свой код для достижения моей цели.

Благодаря

Это частичный образец вида

@model ViewModels.CommentViewModel 

@using (Html.BeginForm("Index", "Comment", FormMethod.Post)) 
{ 
@Html.AntiForgeryToken() 

<div class="form-horizontal"> 
    @Html.ValidationSummary() 


    <div class="form-group"> 
     <label class="control-label col-md-2">Please Type Your Name</label> 
     <div class="col-md-10"> 
      @Html.TextBoxFor(model => model.Name, new { @class = "form-control" }) 
      @Html.ValidationMessageFor(model => model.Name) 
     </div> 
    </div> 
<input id="addComment" type="submit" value="Add" /> 
</div> 
} 
@foreach (var item in Model.Comments) 
{ 
<p> 
    @item.Name 
</p> 

} 

Вот контроллер

public PartialViewResult Index(int id) 
    { 
     var model = new CommentViewModel() { Comments= db.Comments.Where(x=> x.NewsId == id && x.isApproved== true)}; 
     return PartialView("_Comments", model); 

    } 
[HttpPost] 
    public PartialViewResult Comment(int id, CommentViewModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      var comment = new Comment() 
      { 
       Name = model.Name, 
       Title = model.Title, 
       CommentContent = model.Content, 
       Email = model.Email, 
       CreationDate = DateTime.Now, 
       RefId = Guid.NewGuid(), 
       isApproved = false, 
       NewsId = id 
      }; 
      db.Comments.Add(comment); 
      db.SaveChanges(); 
      return PartialView(); 
     } 

     return PartialView(); 
    } 
+0

Это не вопрос на стороне сервера, рассмотрели ли вы использование какого-либо javascript для включения элементов html, когда это необходимо? theres много Рамки достижения этого, тот, который я использую, является angularjs, он избегает застревания моделирования статических страниц на стороне сервера – Charlie

ответ

0

Если вы хотите, чтобы делать вещи, как отправить форму и получить обновленные данные без перезагрузки страницы , то вы говорите об AJAX. Тот факт, что это частичное представление, в этом контексте не имеет смысла. Неважно, сколько разных представлений будет отображаться в этом частичном представлении, вам просто нужно одно действие в одном контроллере, который может ответить на запрос AJAX. Тогда вам просто нужно сделать что-то вроде следующей с JavaScript, который может быть включен через внешний файл в любом вид необходим эта форма:

$('#MyPartialViewForm').on('submit', function (e) { 
    // prevents form from submitting standard way, causing page refresh 
    e.preventDefault(); 

    $.post('/url/that/handles/form', $(this).serialize(), function (results) { 
     // results will be a rendered partial with the data here, 
     // which you can use to replace the content of a div or 
     // something on your page. 
     $('#DivWhereSubmittedDataIsDisplayed').html(results); 
    }); 
}); 

Затем в своем действии, которое отвечает на запрос AJAX:

[HttpPost] 
public ActionResult ActionForAjaxForm(FormModel model) 
{ 
    // do something like save the posted model 

    return PartialView("_PartialViewThatRendersData", model); 
}