我有一个名为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});
并且甚至不会调用该方法。有什么问题?
答案 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来获得正确的视图。