如何使动作方法呈现特定的命名视图?

时间:2012-03-19 21:52:06

标签: asp.net-mvc

我有这个动作方法SearchAroundMe(),然后有人认为它会渲染视图“NoViewHasThisName”,但令我惊讶的是该方法坚持渲染默认视图“SearchAroundMe”,如何制作动作方法呈现“NoViewHasThisName”视图?

我已将此问题上传到Skydrive的简单测试应用程序:https://skydrive.live.com/?cid=5c0bc0a6f7bdc3c6#cid=5C0BC0A6F7BDC3C6&id=5C0BC0A6F7BDC3C6%21164

如果您只是运行该应用程序,您将看到问题。因为我使用位置感知浏览器,应用程序会要求津贴来跟踪您的身体状况,不要担心这一点,因为我没有收集任何信息或做任何不好的事情。

**[HttpPost] 
public ActionResult SearchAroundMe(double latitude, double longitude) 
{ 
    return View("NoViewHasThisName"); 
}**

4 个答案:

答案 0 :(得分:1)

你正在做一个ajax帖子,但你实际上并没有对结果做任何事情。

你根本不会离开这个页面。在允许您的位置后查看Firebug,它会执行帖子并返回视图“NoViewHasThisName”,但是您没有看到它,因为您还没有定义如何处理结果。

用此替换您的.post来电,您会明白我的意思

    $.ajax("News/SearchAroundMe", {
      type: "POST",
      async: false,
      data: { latitude: latitude, longitude: longitude },
      success: function (response) {
          $("body").html(response);
      }
    });

显然这不是你想要做的,但这只是一个例子。

答案 1 :(得分:0)

只需将路径放到要返回的NoViewHasThisName.aspx视图中:

[HttpPost] 
public ActionResult SearchAroundMe(double latitude, double longitude) 
{ 
    return View("~/Views/NoViewHasThisName.aspx"); 
}

答案 2 :(得分:0)

你可以试试这个:

return RedirectToAction("Action", "Controller");

创建一个空行动:

public ActionResult NoViewHasThisName()
{
    return View();
}

答案 3 :(得分:0)

感谢布兰登,你昨天的观察对于追踪问题非常重要。我找到了问题的解决方案。使用jQuery.post()会导致一些问题,但是当我使用表单提交切换到从视图传输数据到控制器时,突然之间就没有问题: - )

@using (Html.BeginForm("SearchAroundMe","News")) 
{        
        @Html.Hidden("latitude");
        @Html.Hidden("longitude");
}

var latField = $("#latitude");
var longField = $("#longitude");

latField.val(latitude);
longField.val(longitude);

$('form').submit();