javascript - 将 ViewData 值从 Controller 传递到 View

标签 javascript c# jquery asp.net asp.net-mvc

我正在对我的 Controller 方法进行 ajax 调用,并期望将结果返回到我的 View 中。但是,即使 Controller 返回 ViewData 值,我的 View 也不会显示来自 Controller 方法的值。

扫描仪 View (为简洁起见,删除了版本)

<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>

家庭 Controller

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 调用后 Controller 正在传递结果,但 @ViewData["TextAreaResult"] 的更新值未呈现 View 中。我猜这与由于没有页面刷新而未传递新值有关。

我期望的输出(在本例中)是显示Response The pack is active

网络选项卡 - Ajax 调用响应 enter image description here

HTML View - 仍然显示 Scanner() 函数中定义的默认 @ViewData["TextAreaResult"] 文本。 enter image description here

最佳答案

您无法更新已渲染的@ViewData["TextAreaResult"]。为了实现这个你需要这样做

扫描仪 View

将 View 数据放入p标签

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

Controller

[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);
        }
    });
});

关于javascript - 将 ViewData 值从 Controller 传递到 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45480223/

相关文章:

javascript - AngularJS $on - 重新订阅未订阅的广播

javascript - 从对象数组的数组中绘制 D3 图表

c# - 当字段名称是保留关键字时从 F# 访问 .Net 字段

javascript - ng-options 删除所选选项后,如何保持 ng-model 与选择元素同步

javascript - 创建相同大小的弧,其上具有不同的标签/文本

c# - 在 C# 中存储全局变量(如路径)的位置?

c# - 在主线程外调用 WWW

php - 当 php 返回值更改时,使用 javascript 更新 html 代码

javascript - 如何从一种表单提交多种类型的禁用输入(输入、选择、文本区域标记助手)?

javascript - 如何在javascript中通过属性删除对象