2014-09-10 3 views
0

Ситуация: В моем решении C#/MVC 4 я использую представление с частичным представлением. Представление представляет собой форму с кнопкой отправки. Частичный вид - это div, который скрыт, но может отображаться, если флажок установлен.MVC 4 частичный просмотр приводит к тому, что страница становится неактуальной при отправке

Вопрос: Если частичный вид скрыт, подача работает нормально. Если частичный вид не скрыт, сообщение приводит к тому, что страница перестает отвечать на запросы, если вы ожидаете 3 плюс минуты или, таким образом, отправка в конечном итоге будет работать, как ожидалось.

Код приведен ниже. Заранее благодарю вас за ваше рассмотрение. Я начинающий разработчик, поэтому все комментарии, предложения и критические замечания приветствуются.

Код:

Модель

namespace MyModels 
{ 
    public class MainModel 
    { 
     public SelectListItem Things { get; set;} 

     public IEnumerable<OtherModel> MoreThings { get; set;} 
    } 
} 

Посмотреть // назвали MyView @model MyModels.MainModel @using MyModels @if (модель! = NULL) {

using (Html.BeginForm("MyViewName", "MyControllerName", FormMethod.Post, new { id = "view-form" })) 
{ 
    @Html.LabelFor(model => model.things) 
    @Html.DropDownList("", (Selectist)ViewBag.things) 
    @Html.ValidationMessageFor(model => model.field1) 

    @Html.CheckBoxWithLabel("aNameAttribute", Model.valueAttribute.ToString(), "anIdAttribute", Model.valueAtttribue ==1, "aLabel", "a_Toggle_Class") 
    <div class="treeview" style="display: none;"> 
    <fieldset> 
     <legend>Title</legend> 
    //view causing issues replaces the div below 
    <div id="replacedDiv"></div> 
    </fieldset> 
    </div> 

    <p> 
     <input type="submit" value="Submit" /> 
    </p> 
} 

}

<script type="text/javascript"> 
    $(document).ready(function() { 
     $.ajax({ 
      url: "/MyController/MyPartialView", 
      contentType: "application/html; charset=utf-8", 
      cache: "false", 
      type: "GET", 
      datatype: "html" 
     }) 
     .success(function (result) { 
      $('#replacedDiv").html(result); 
     }) 
    }); 
</script> 

Частичный вид

//named _MyPartialView 
@model MyModels.MainModel 
@using MyModels 

@foreach (var moreThings in ViewBag.moreThings) 
{ 
    <div id="replacedDiv"> 
    <label> 
    <input type="checkbox" [email protected] [email protected] />@moreThings.name </label> 
    </div> 
} 

Контроллер

namespace Main.Controllers 
{ 
    public class MyController 
    { 
     [HttpGet] 
     public ActionResult Index(MainModel model) 
     { 
      return View(model); 
     } 

     public ActionResult MyView() 
     { 
      var model = new MainModel(); 

      return View(model); 

     } 

     public ActionResult MyPartialView(MainModel model) 
     { 
      <OtherModel> moreThings = BLotherModel.GetMoreThings(); 
      ViewBag.moreThings = moreThings; 

      return PartialView("_MyPartialView", promotion); 
     } 

     [HttpPost] 
     public ActionResult MyView(FormCollection collection) 
     { 
      MainModel model = new MainModel(); 

      return SaveModel(model); 
     } 
    } 
} 
+1

У вас есть ошибка синтаксиса в вашем JavaScript. Хотя это может и не вызвать эту конкретную проблему, это, безусловно, не помогает. – David

+0

Удалите определенные элементы из вашего кода, чтобы выяснить, в чем причина. – Rohit

+0

Я только что обновил javascript, это была опечатка, а не фактический код –

ответ

2

В вашем AJAX вы используете:

$('#replacedDiv").html(result); 

Но ваш частичный вид содержит <div id="replacedDiv">, которые порождаются в цикле

заменить частичный код вида с:

@foreach (var moreThings in ViewBag.moreThings) 
{ 
    <label>@moreThings.name </label> 
    <input type="checkbox" [email protected] [email protected] /> 
} 

и это должно быть в порядке

+0

Проблема сохраняется, однако я использую это предлагаемое изменение. Это полностью ускользнуло от моего внимания. –

+1

Попробуйте открыть скрипач или какой-либо другой сетевой монитор (тот, который в браузере тоже в порядке) и проверьте, отправлен ли запрос POST? Если запрос отправляется немедленно, проблема возникает на стороне сервера. Установите точку останова в первой строке вашего действия. если есть задержка между представлением запроса и точкой прерывания, проблема может заключаться в использовании фильтров связывания/действий модели или чего-либо еще, которое выполняется до самого действия. –

+0

ОК настолько странно, что поведение не происходит в firefox, поэтому я собираюсь идти вперед и отмечать исходное предложение как ответ –