2017-08-03 99 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调用来刷新页面,我认为您的视图只是局部视图...是不是这种情况? –

相关问题