PartialViews显示未更新的模型

时间:2013-09-08 12:03:01

标签: c# asp.net-mvc-4 asp.net-ajax asp.net-mvc-partialview

我使用ASP.NET MVC3(Razor)和Ajax的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 View:

<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。为什么? 任何其他想法如何根据表单中发布的数据显示特定的局部视图是受欢迎的。

1 个答案:

答案 0 :(得分: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);
        }
    });
});

希望这对你有用。