【问题标题】:calling controller method using jquery but method not redirecting to its corresponding view使用 jquery 调用控制器方法,但方法不重定向到其相应的视图
【发布时间】:2022-01-18 13:21:27
【问题描述】:

我有一个页面“GetData.cshtml”,我需要在其中填写一些文本框数据并发送到控制器方法。我正在使用 jquery 向控制器方法发送数据。

//GetData.cshtml
$(document).ready(function () {
    $('#btn_sbmt_recommendation').click(function () {            
        $.post("/RegistrationModels/Registration_card",
        {
            firm_id: $('#id_reg_id').val(), 
            amount: $('#id_amount').val()
            });
        console.log("job done....");
    });
})

在调试应用时,成功调用了控制器方法。

public ActionResult Registration_card(string reg_id, string amount)
        {
            try
            {
                // code block
                return View(updated_firm);
            }
            catch (Exception ex) { throw; }
        }
    

根据我的要求,我想在Registration_card.cshtml 页面中显示数据,但它没有重定向到页面。 jquery 块中的控制台消息console.log("job done...."); 正在显示。这意味着页面又回到了GetData.cshtml。是因为使用 jquery 调用控制器方法吗? 通过 jquery 调用控制器方法Registration_card 后,如何转到页面Registration_card.cshtml

我也尝试了下面的代码,但它也不起作用。

public ActionResult Registration_card(string firm_id, string ward_calani_num, string amount)
        {
            try
            {
                // code block
                return RedirectToAction("Registration_card", updated_firm);
            }
            catch (Exception ex) { throw; }
        }

【问题讨论】:

  • 这就是 AJAX 的工作原理。它忽略服务器端重定向。如果你想重定向页面,那么 AJAX 请求本身就变得几乎无关紧要了。
  • console.log("job done....");outside jquery 调用,因此与它是否正常工作无关(删除 $.ajax 调用,console.log 仍然会触发)
  • RedirectToAction 返回带有新 url 的 302。浏览器“正常”地处理这个 - 通过获取 302 响应然后对提供的 url 进行 second 调用。您只有第一次调用,因此在您的后回调/错误处理程序中,您需要检查 302,然后在代码中重定向页面(就像浏览器在地址栏中输入 url 时所做的那样) - if i> 这就是您想要处理它的方式(上面提到的替代方法是让表单提交)。它不会是自动的
  • 您将在 ajax 调用的“回调”方法中处理它......(您的控制器将其数据返回给回调......因为这就是所谓的方法......)序列化整个表单,所以像“ formresult = $('#'+formID).serialize(); $.post("/RegistrationModels/Registration_card", formresult, function(data){... 做你想做的事data here... 或者只是使用 location.assign(myurl.com)....});... 设置浏览器的位置...所以第三个参数是回调,它是一个匿名函数,一旦方法返回就会执行东西。
  • api.jquery.com/jQuery.post/… 如果需要取回一些重定向使用的参数,用JSON比较方便...如果这样做,将控制器方法的返回类型设置为Task...所以公开 Task Registration_card...

标签: javascript jquery asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

根据您的问题,您似乎想通过从GetData.cshtml 获取一些数据到Registration_card ActionMethod 来从GetData.cshtml 重定向/转到Registration_card.cshtm,这实际上将显示Registration_card.cshtm .

如果上述情况属实,那么您不需要 Ajax Post 请求,因为您的 ActionMethodHttpGet,因为您没有指定它是 HttpPost。所以解决方法可能类似于下面的代码。

$(document).ready(function () {
    $('#btn_sbmt_recommendation').click(function () {
        var id_reg_id=$('#id_reg_id').val();   
        var id_amount=$('#id_amount').val();         
        location.href=`/RegistrationModels/Registration_card?reg_id=${id_reg_id}&amount=${id_amount}`;
      
        //$.post("/RegistrationModels/Registration_card",
           //    {
           //        firm_id: $('#id_reg_id').val(),
           //        amount: $('#id_amount').val()
           //    });
          //console.log("job done....");
    });
})

【讨论】:

    【解决方案2】:

    如果要重定向页面,您应该使用 javascript 或 jquery,因为当您使用 jquery 时,控制器无法进行重定向。

    【讨论】:

    • 你想说什么,该用jQuery/JavaScript还是不用???
    • 是的,如果你想重定向然后使用 jQuery/JavaScript。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多