Javascript 将ViewData值从控制器传递到视图
我正在对我的控制器方法进行ajax调用,并期望结果返回到我的视图。但是,即使控制器返回Javascript 将ViewData值从控制器传递到视图,javascript,c#,jquery,asp.net,asp.net-mvc,Javascript,C#,Jquery,Asp.net,Asp.net Mvc,我正在对我的控制器方法进行ajax调用,并期望结果返回到我的视图。但是,即使控制器返回ViewData值,我的视图也不会显示来自控制器方法的值 扫描仪视图(精简版) JS(精简版) 在“网络”选项卡下的“响应”部分中,我可以看到成功的ajax调用后控制器正在传递结果,但视图中未呈现更新后的@ViewData[“TextAreaResult”]。我猜这与由于没有页面刷新而没有传递新值有关 我期望的输出(在本例中)是显示包激活时的响应 网络选项卡-Ajax调用响应 HTML视图-仍然显示在Scan
ViewData
值,我的视图也不会显示来自控制器方法的值
扫描仪视图(精简版)
JS(精简版)
在“网络”选项卡下的“响应”部分中,我可以看到成功的ajax调用后控制器正在传递结果,但视图中未呈现更新后的@ViewData[“TextAreaResult”]
。我猜这与由于没有页面刷新而没有传递新值有关
我期望的输出(在本例中)是显示包激活时的响应
网络选项卡-Ajax调用响应
HTML视图-仍然显示在Scanner()
函数中定义的默认@ViewData[“TextAreaResult”]
文本。
我看不到您的代码中有任何地方实际使用返回的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);
});
});
(未经测试,但希望您能理解)您无法更新已渲染的
@ViewData[“textrarearesult”]
。为了实现这一目标,你需要这样做
扫描仪视图
将viewdata放入p标记中
<p id="pTextAreaResult">@ViewData["TextAreaResult"]</p>
脚本
$('#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);
}
});
});
其他详细信息在视图中得到更新?您可以尝试:Html.Raw(ViewData[“HTMLData”].ToString())不确定其他详细信息是什么意思。我只是从没有更新的控制器传递TextAreaResult字符串。页面上的其余细节来自JS代码。唯一的问题是结果输出部分,我希望TextAreaResult值
@ViewData[“TextAreaResult”]
在Scanner视图或DecodeScanner视图中?我认为要更改ViewData
值,需要触发回发,而不是AJAX回调$.ajax
通常用于返回部分视图而不是整个视图。它不只是在.card
div中呈现整个html页面吗?我应该如何只提取@ViewData[“TextAreaResult”]
部分并在视图中替换它?因为您使用AJAX调用刷新页面,我假设您的视图只是部分视图。。。不是这样吗?我没有DecodeScanner
视图。实际上,Decode Scanner只是一个操作,它进行处理并将数据返回到Scanner
view显示您的ajax响应方法这就是我在问题中发布的所有代码。我是否可以只使用Scanner()
操作并执行[HttpPost]
来自ajax方法的调用?等等,我正在更新mt asnwer
$('#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);
});
});
<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);
}
});
});