无法从javascript将数据发送回MVC控制器中的操作

时间:2014-04-16 21:31:43

标签: c# jquery asp.net-mvc

我使用jquery将行加载到表中。每行包含一个Id。

row = '<tr><td><button type="button" class="edit-form btn btn-default" data-form-id="' + value[0].id + '"></button></td></tr>';
tbody.append(row);

单击按钮,我需要将此Id发送回控制器中的操作,然后该操作将重定向到具有此Id的新视图。在新页面上,我将在javascript函数中使用此Id,然后使用jQuery ajax加载与此id相关的详细信息。 我无法实现这一点。我尝试了几件事

  • 尝试使用无效的javascript创建html动作链接
  • 使用ajax将数据(id)发送到操作,但操作最终返回新视图的html作为响应而不是重定向

我已经完成了与此相关的其他几个Stackoverflow问题,并尝试了所有这些问题。似乎没什么用。请建议我应该如何解决这个问题。任何建议,将不胜感激。我已将数据发送到控制器中的其他操作,但现在我的问题是,我需要此ID转到操作,它应该将我重定向到该页面上显示此信息的新页面

我已经粘贴了以下代码以了解我尝试过的事情。

$.each(this.data, function (key, value) {
            var row = '<button type="button" class="edit-form btn btn-default" data-form-id="' + value[0].id + '"><span class="glyphicon glyphicon-eye-open"></span></button></td></tr>';
            tbody.append(row);
        });   

点击此按钮,我在我的javascript中调用以下代码

openEditForm: function (evt) {
        var formId = $(evt.currentTarget).data("formId");
        $.ajax({
            url: '/Home/Test',
            type: "POST",
            dataType: "json",
            data: JSON.stringify({ formId: formId }),
            contentType: "application/json; charset=utf-8;",
            success: function (response) {
            },
            error: function (xhr, ajaxOptions, thrownError) {

            }
        });
    }

在我的控制器中,我有一个名为Test的动作,它执行以下操作

public ActionResult Test(string formId)
    {            
        ViewBag.Title = "Testing Page ";
        ViewBag.Message = "Testing Page" + formId + "hi";            
        return View();
    } 

我想要的是该操作接收此formId并将其重定向到名为Test.cshtml的视图。我需要该视图在其中包含formId信息,以便我可以在该页面上使用javascript来进行ajax调用以检索表单信息。

3 个答案:

答案 0 :(得分:0)

我愿意:

选项a)创建一个带有隐藏字段的表单元素,在用户单击按钮时将其填充,然后将表单提交给您的操作

<form method="post" action="/yourController/yourAction" id="frmAction">
  <input type="hidden" name="parameterYouExpectinYourAction" value="" id="hdnField" />
</form>
<script>
$(".btn").on("click", function() {
  $("#hdnField").val($(this).data("form-id"));
  $("#frmAction").submit();
});
</script>

选项b)创建普通链接而不是像

这样的按钮
'<a href="/controller/youraction?yourParam=' + value[0].id + '" >link</a>'

这不是最干净的方式,但可以帮助你弄清楚如何以其他方式完成它(我希望)。

答案 1 :(得分:0)

我看到的最简单的方法就是按钮上的一个事件,并重定向到带有ID的网址。

$('button').on('click', function () {
    window.location = 'http://yourURL' + '/' + $(this).attr('data-form-id');
});

只需根据您的需要(Html.Action(...)$.post(...),...)进行修改。

进入您的控制器后,您可以将return RedirectToAction(...)与提交的ID结合使用,将用户重定向到您的第二个视图。

答案 2 :(得分:0)

Used ajax to send data(id) to the action, but the action ended up returning the html of     
the new view as the response instead of redirecting

By Above Line你的意思是说你希望将数据发布到行动,而Action1将调用另一个Action,它将使用该返回的ID ......

因此,如果这是The Case,那你为什么要使用Ajax?

function myfunction()
{
  var formId = $(evt.currentTarget).data("formId");

  // window.location = "ActionNameHere?formId" + formId;
 // foryour Case
 window.location="Test?formId="+formId;

}

以上代码会将您重定向到

public ActionResult Test(string formId)
{            
    ViewBag.Title = "Testing Page ";
    ViewBag.Message = "Testing Page" + formId + "hi";            
    return View();
}

从此处您将获得包含Id的新页面... 发起HTTP请求的最佳方法是使用

  document.loacation.href.replace('URL')