调用Action方法,但返回错误的View

时间:2012-03-13 14:02:44

标签: asp.net-mvc-3

我有一个名为BearController的控制器。在其中我有一个索引操作方法和另一个操作方法。

public ActionResult EditBear(int bearId)
{
    ...
    return View();
}

以下是我从索引方法的角度调用它的方法:

$.ajax({ url: "Bear/EditBear", data: { bearId: 2} })

该方法被调用,断点遍历EditBear的末尾,然后在我的浏览器中,我从索引方法获取视图。浏览器中的url是索引方法的url(仅表示localhost和controllerName)。

我也尝试过:

$.get('@Url.Action("EditBear", "Bear")', { bearId: 2});

并且甚至不会调用该方法。有什么问题?

3 个答案:

答案 0 :(得分:0)

我想你想得到id为2的Bear对象(或者你传递的任何东西。但是在你的action方法中你看起来只返回View而没有任何对象作为参数传递给它。所以我猜它会将空白视图返回给客户端。

您可能希望重新发送填充的对象。

public ActionResult EditBear(int bearId)
{
    BearViewModel objVM=new BearViewModel(bearId); // Load the ViewModel
    return View(objVM);
}

并在您的视图中

@model BearViewModel
<b>Edit Bear</b>
@using (Html.BeginForm())
{
    @Html.TextBoxFor(m => m.BearName)
    @Html.HiddenFor(m=>m.BearId)
     <p>
        <input type="submit" value="Save" />
     </p>
}

由于它是一个ajax调用,你应该考虑返回一个局部视图。

public ActionResult EditBear(int bearId)
{
    BearViewModel objVM=new BearViewModel(bearId); // Load the ViewModel
    if (Request.IsAjaxRequest())
     {
       return View("Partial/EditBear", objVM);
     }
    return View(objVM);
}

假设您在Bear View文件夹中名为“Partials”的子文件夹中有部分视图

答案 1 :(得分:0)

好吧,首先我不会调用方法“EditBear”。因为它在BearController中,所以我只称它为Edit。这使得URL / Bear / Edit / 1而不是/ Bear / EditBear / 1。

其次,您通过AJAX调用Edit方法,因此视图将作为对AJAX调用的响应返回。您可以使用Fiddler或Firebug验证这一点。

我认为您只想使用@ Url.Action进行简单的通话,而不使用任何Javascript。只需使用Razor将链接嵌入HTML(表格?)中。

<td>
@Url.Action("Edit", "Bear", new { id = 2 });
</td>

答案 2 :(得分:0)

看起来,如果你用Ajax调用一个action方法,那么视图就会以某种方式显示出来。我不得不使用window.location.href来获得正确的视图。