簡體   English   中英

無法通過javascript將數據發送回MVC控制器中的操作

[英]Unable to send back data to action in MVC controller from javascript

我使用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將data(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調用以獲取表單信息。

我會做:

選項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>'

這不是最干凈的方法,但是可以幫助您弄清楚如何以其他方式完成它(我希望)。

我看到的最簡單的方法就是按鈕上的事件,該事件重定向到帶有ID的URL。

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

只需按照您的需要進行修改即可( Html.Action(...)$.post(...) ,...)。

進入控制器后,您可以使用return RedirectToAction(...)結合提交的ID將用戶重定向到第二個視圖。

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

在行上方,您的意思是說您希望將數據過帳到操作,而Action1將調用另一個Action,該操作將使用返回的ID ...

因此,如果是這種情況,那么為什么要使用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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM