2017-08-03 74 views
0

我正在對我的控制器方法進行ajax調用,並期待將結果返回到我的視圖。但是,即使通過控制器返回值ViewData,我的視圖也不會顯示來自控制器方法的值。從控制器傳遞ViewData值來查看

掃描器視圖(爲了簡潔剝離版本)

<div class="card card-outline-danger card-danger"> 
    <div class="card-block"> 
     <blockquote class="card-blockquote"> 
      <p>Result In</p> 
      <div id="resultsList"></div> 
      <p>Result Out</p> 
      @ViewData["TextAreaResult"] 
     </blockquote> 
    </div> 
</div> 

家庭控制器

public IActionResult Scanner() { 
    ViewData["TextAreaResult"] = "No Scan yet"; 
    return View(); 
} 

[HttpPost] 
public IActionResult DecodeScanner(string productCode, string serialNumber, string batch, string expirationDate, int commandStatusCode) { 
    try { 
     Control.Initialize(); 
     Control control = new Control(); 
     Request request = new Request(); 

     request.setProductCode(productCode); 
     request.setSerialNumber(serialNumber); 
     request.setBatch(batch); 
     request.setExpirationDate(expirationDate); 
     request.setCommandStatusCode(commandStatusCode); 

     control.sendSinglePackOperation(request); 

     Console.WriteLine("Response:" + request.getHttpResponseCode()); 

     ViewData["TextAreaResult"] = string.Format(" Response {0}", request.getHttpInformation()); 

    } catch (Exception exc) { 
     ViewData["TextAreaResult"] = "Exception: " + exc.Message; 
    } 

    return View("Scanner"); 
} 

JS(剝離版本爲了簡潔)

$('#my-button').click(function() { 
    $.ajax({ 
     url: "DecodeScanner", 
     type: "POST", 
     data: { 
      productCode: productCode, 
      serialNumber: serialNumber, 
      batch: batch, 
      expirationDate: expirationDate, 
      commandStatusCode: 0 
     }, 
     async: true 
    }); 
}); 

在網絡選項卡下的響應部,我可以看到控制器在成功調用ajax後傳遞的結果,但更新後的結果@ViewData["TextAreaResult"]的值不會在視圖中呈現。我想這是以某種方式相關的新值不傳遞,因爲沒有頁面刷新。

輸出我期待(在這種情況下)是顯示Response The pack is active

網絡標籤 - Ajax調用響應 enter image description here

HTML視圖 - 仍然顯示在Scanner()函數定義的默認@ViewData["TextAreaResult"]文本。 enter image description here

+0

其他細節在視圖中得到更新? – User3250

+0

您可以嘗試:Html.Raw(ViewData [「HTMLData」]。ToString()) –

+0

不確定您的其他細節是什麼意思。我只傳遞未更新的控制器的TextAreaResult字符串。其他的細節來自JS代碼。唯一的問題是結果部分,我期待TextAreaResult值 – zaq

回答

1

不能更新@ViewData["TextAreaResult"]這是已經呈現。你需要爲實現p標籤

認沽可視數據這

掃描儀查看爲此

<p id="pTextAreaResult">@ViewData["TextAreaResult"]</p> 

控制器

[HttpPost] 
public IActionResult DecodeScanner(string productCode, string serialNumber, string batch, string expirationDate, int commandStatusCode) { 
    string TextAreaResult = string.Empty; 
    try { 
     Control.Initialize(); 
     Control control = new Control(); 
     Request request = new Request(); 

     request.setProductCode(productCode); 
     request.setSerialNumber(serialNumber); 
     request.setBatch(batch); 
     request.setExpirationDate(expirationDate); 
     request.setCommandStatusCode(commandStatusCode); 

     control.sendSinglePackOperation(request); 

     Console.WriteLine("Response:" + request.getHttpResponseCode()); 

     TextAreaResult = string.Format(" Response {0}", request.getHttpInformation()); 

    } catch (Exception exc) { 
     TextAreaResult = "Exception: " + exc.Message; 
    } 

    return Json(TextAreaResult, JsonRequestBehavior.AllowGet); 
} 

腳本

$('#my-button').click(function() { 
    $.ajax({ 
     url: "DecodeScanner", 
     type: "POST", 
     data: { 
      productCode: productCode, 
      serialNumber: serialNumber, 
      batch: batch, 
      expirationDate: expirationDate, 
      commandStatusCode: 0 
     }, 
     async: true, 
     success: function(data) { 
      $('#pTextAreaResult').text(data); 
     } 
    }); 
}); 
+0

我沒有'DecodeScanner'視圖。實際上,DecodeScanner只是一個處理並將數據返回到'Scanner'視圖的動作。 – zaq

+0

顯示您的ajax響應方法 – Manoj

+0

這就是我在問題中發佈的所有代碼。 – zaq

0

我看不到任何地方你的代碼,你真的用返回的HTML更新視圖?

如果添加成功回調到您的AJAX後,你可以做這樣的事情:

$('#my-button').click(function() { 
    $.ajax({ 
     url: "DecodeScanner", 
     type: "POST", 
     data: { 
      productCode: productCode, 
      serialNumber: serialNumber, 
      batch: batch, 
      expirationDate: expirationDate, 
      commandStatusCode: 0 
     }, 
     async: true    
    }).done(function(html) { 
     $('.card').replaceWith(html); 
    }); 
}); 

(沒有測試但希望你的想法)

+0

難道只是在'.card' div內渲染整個html頁面嗎?我應該如何提取'@ViewData ['TextAreaResult']'部分並將其替換到視圖中? – zaq

+1

因爲您使用的是AJAX調用來刷新頁面,我認爲您的視圖只是局部視圖...是不是這種情況? –

相關問題