【问题标题】:How to execute action without change current page in mvc3如何在不更改 mvc3 中的当前页面的情况下执行操作
【发布时间】:2012-09-01 08:50:26
【问题描述】:

我使用 Javascript yes no window 制作我最喜欢的产品。单击是按钮时,产品将获得我最喜欢的并刷新背景页面。我在控制器中有 MakeMyFavorite 操作,但每次调用都会返回 same 结果。

public ActionResult MakeMyFavorite( int id )
{
   ....
   return RedirectToAction( "Details", "Product", product );
}

和 Javascript:

<script language="JavaScript" type="text/javascript">
    function confirmFavorite() {
        if (confirm("Are you sure make favorite?")) {
            document.location.reload(true);
            return true;
        } else {
            return false;
        }
    } 
</script>

和链接:

<a href="@Html.Action ( "MakeMyFavorite", "Product", new { id = item.ID } )" 
     onclick = "return confirmFavorite()"> Make Favorite </a> 

我在网站的不同位置(详细信息、索引和其他视图)使用收藏链接。单击链接时,产品被收藏,页面刷新,但始终打开详细信息视图。 我在控制器中将ActionResult 更改为void,但从未打开,因为没有返回视图。 我该怎么办,在网站的不同页面,当我点击收藏链接时,产品被收藏了,但背景页面没有改变?保持当前视图。 (抱歉英语不好)

【问题讨论】:

  • 确认收藏时是否要导航不同的视图?
  • 不,我想在确认收藏后保持当前视图。

标签: javascript jquery asp.net-mvc-3 jquery-events


【解决方案1】:

你可以这样做

做一个 JsonResult 动作

喜欢

public JsonResult MakeMyFavorite(int id)
{
   ......
   string result = "favorite";
   return this.Json(result, JsonRequestBehavior.AllowGet);
}

让你的锚标签像

<a href="#" id="myfav" onclick="confirmFavorite(@item.id);">Favorite</a>

你的 jquery 来处理这个

<script type="text/javascript">
    function confirmFavorite (id) {
        if(confirm("Are you sure make favorite?")) {
           var data = { "id": id };
           $.getJSON("/Product/MakeMyFavorite", data, function (data) {
               //check your data here what it is returning
               if($.trim(data)=="favorite")
               {
                //Do what you want to do.
               }
           });
        }
     }

</script>

【讨论】:

  • 我添加了 document.location.reload(true);到“//做你想做的事”的底部。在 JavaScript 中。现在,对话框打开,产品被收藏,但是,当前页面消失了。白页似乎,页面顶部是“最喜欢的”字符串
  • 为什么要重新加载当前页面,是否会改变当前页面的某些内容?如果没有,则无需重新加载页面。如果是,那么location.reload() 将自行工作。
  • 我重新加载页面,这就是为什么“添加收藏”文本从产品中消失了。
  • 你能把你用锚标签&lt;a href="#" id="myfav" onclick="confirmFavorite(@item.id);"&gt;Favorite&lt;/a&gt;做了什么
【解决方案2】:

当你想要重新加载时传入一个值 (true),当你不想重新加载时传入一个值 (false 或无参数):

<a href="@Html.Action ( "MakeMyFavorite", "Product", new { id = item.ID } )" 
 onclick = "return confirmFavorite( true )"> Make Favorite </a>

<a href="@Html.Action ( "MakeMyFavorite", "Product", new { id = item.ID } )" 
 onclick = "return confirmFavorite( false )"> Make Favorite </a>

然后在js中:

function confirmFavorite( reload ) {
    if (confirm("Are you sure make favorite?")) {
        if( reload ) {
            document.location.reload(true);
        }
        return true;
    } else {
        return false;
    }
}

【讨论】:

  • 当 MakeMyFavorite 操作起作用时,会加载产品/详细信息视图。我想留在当前页面。
  • @Mores:你说的留下,你的意思是取消重载,什么都不做?
  • 只重新加载当前页面并制作喜欢的产品。
猜你喜欢
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 2012-06-02
  • 2014-01-17
  • 2013-07-23
  • 2022-07-12
  • 1970-01-01
相关资源
最近更新 更多