2013-09-08 4 views
1

У меня проблемы с PartialViews с использованием ASP.NET MVC3 (Razor) и Ajax. Это мой случай:
У меня есть простой тест ViewModel:Дисплей PartialViews не обновлен модель

public class MyModel 
{ 
    public string MyText { get; set; } 
    public int MyNumber { get; set; } 
} 

Моя цель иметь форму. В зависимости от опубликованных данных я хотел бы отображать разные частичные представления. Я создал основной формой (Индексный просмотр):

@using (Ajax.BeginForm("Index", "Test", new AjaxOptions() { HttpMethod = "POST", UpdateTargetId = "testdiv" })) 
{ 
    <div id="testdiv"> 


     @Html.Partial("Cat") 

    </div> 
    <input type="submit" value="Go" /> 
} 

Я создал две различные частичные виды, которые должны быть показаны, когда основная форма размещена (в зависимости от опубликованных данных): Cat Вид:

<span>cat view</span> 
@Html.TextBoxFor(m=> m.MyText) 
@Html.TextBoxFor(m=> m.MyNumber) 
<span>@DateTime.Now.Second</span> 

Собака Вид:

<span>dog view</span> 
@Html.TextBoxFor(m=> m.MyText) 
@Html.TextBoxFor(m=> m.MyNumber) 
<span>@DateTime.Now.Second</span> 

Мой контроллер содержит четыре действия:

[HttpGet] 
public ActionResult Index() 
{ 
    MyModel model = new MyModel(); 
    return View(model); 
} 


[HttpPost] 
public PartialViewResult Index(MyModel model) 
{ 
    if (model.MyNumber == 1) 
    { 
     return Cat(model); 
    } 
    else 
    { 
     return Dog(model); 
    } 
} 

[HttpPost] 
public PartialViewResult Cat(MyModel model) 
{ 
    model.MyText = model.MyText + " K"; 
    return PartialView("Cat", model); 
} 

[HttpPost] 
public PartialViewResult Dog(MyModel model) 
{ 
    model.MyText = model.MyText + " P"; 
    return PartialView("Dog", model); 
} 

Моя проблема заключается в том, что при выполнении действия Cat или Dog MyText в модели изменяется, но когда отображается правильный частичный вид, я вижу старый (не обновленный) MyText. Зачем? Любые другие идеи, как показать конкретное частичное представление в зависимости от данных, размещенных в форме, приветствуются.

ответ

0

Я немного обновляю свои частичные взгляды. Я хотел бы использовать вызов Ajax на кнопку мыши вместо поста назад и передать частичный вид, что вы хотите, возвращаемые

$('.btnSubmit').on('click', function(){ 
    $.ajax({ 
     url: "@(Url.Action("Action", "Controller"))", 
     type: "POST", 
     cache: false, 
     async: true, 
     data: { type: 'cat/dog' }, 
     success: function(result){ 
      $('.Content').html(result); 
     } 
    }); 
}); 

Надеется, что это будет работать для вас.

+0

Я использую его как jQuery ajax так же, как вы, но проблема существует. Это обновляется о добавленных или удаленных элементах, но не для элементов, которые изменяются только по содержанию. Я не знаю почему. Это меня смутило. :(Вы можете увидеть мой вопрос об этом в http://stackoverflow.com/questions/23033242/send-partial-view-model-and-update-partial-view-with-jquery-has-issues – QMaster