【问题标题】:ASP.NET Core - Is there any way to put the viewbag on javascript or jquery?ASP.NET Core - 有没有办法将 viewbag 放在 javascript 或 jquery 上?
【发布时间】:2021-04-21 00:30:16
【问题描述】:

我尝试将 viewbag 数据放入 javascript,以便在修改任何数据时不刷新整个页面来填充表格。它不工作,但在 html 上它工作。

这是我的代码..

fillDatatable();

function fillDatatable() {
    $('#TableRecords').html(
    @if (Context.Session.GetString("cart") != null)
    {
    foreach (var item in ViewBag.cart)
    {
    <tr>
        <td>
            @item.Items.ItemID
        </td>
        <td>
            @item.Items.ItemModelDescription
        </td>
        <td class="text-right">
            <input id="@("UnitPrice" + item.Items.ItemID)" class="form-control text-right b-r-xl" value="@item.Items.ItemUnitPrice" oninput="return change_unitprice('@item.Items.ItemID')" />
        </td>
        <td class="text-right">
            <input id="@("Quantity" + item.Items.ItemID)" class="form-control text-right b-r-xl" value="@item.Quantity" oninput="return change_quantity('@item.Items.ItemID')" />
        </td>
        <td class="text-right">
            <label id="@("Subtotal" + item.Items.ItemID)">
                @(item.Quantity * item.Items.ItemUnitPrice)
            </label>
        </td>
        <td>
            <a class="btn btn-sm btn-danger btn-rounded" asp-controller="purchaseorderheader" asp-action="Remove" asp-route-id="@item.Items.ItemID"><span class="fa fa-trash"></span></a>
        </td>
     </tr>
     }
     }
     );
}

我哪里错了?有没有办法让它正确?任何关于更好方法的建议都非常受欢迎。非常感谢您的帮助。

【问题讨论】:

标签: javascript model-view-controller asp.net-core-mvc


【解决方案1】:

可以这样在js中获取ViewBag数据:

var obj = @Html.Raw(Json.Serialize(ViewBag.cart));

另外,你不能在js函数中编写c#代码。如果不想刷新整个页面,可以使用ajax请求后端获取更新后的数据,然后将原始表中的数据替换为返回的数据。

更新:

var purchaseOrderList = new List<trnPurchaseOrderLists>
{
    new trnPurchaseOrderLists
    {
        PurchaseOrderID = "1",
        Quantity = 10,
        Items = new mfItems
        { 
            ItemID = "1", 
            ItemModelDescription= "A"
        }
    },
    new trnPurchaseOrderLists
    {
        PurchaseOrderID = "2",
        Quantity = 11,
        Items = new mfItems
        {
            ItemID = "2", 
            ItemModelDescription= "B"
        }
    },
};

ViewBag.purchaseOrder = purchaseOrderList;

JS

var obj = @Html.Raw(Json.Serialize(ViewBag.purchaseOrder));
console.log(obj);

结果:

【讨论】:

  • 先生,我已经这样做了,但未定义。我仍在寻找解决方案。
  • @JeffreyEstrera 你能在 ViewBag.cart 中显示数据吗?
  • 函数 fillDatatable() { var PurchaseOrder = @Html.Raw(Json.Serialize(ViewBag.purchaseOrder)); if (PurchaseOrder != "") { var tableHTML = ""; $.each(PurchaseOrder, function (index, value) { tableHTML += "" + value.Quantity + ""; }); $("#TableRecords").html(tableHTML); } } 我认为这是因为对象。因为对象内部还有另一个对象。
  • 公共类 trnPurchaseOrderLists { public mfItems Items { get;放; } 公共十进制数量 { 得到;放; } 公共小数 UnitCost { 得到;放; } 公共字符串 PurchaseOrderID { 获取;放; } } public class mfItems { [Key] public string ItemID { get;放; } 公共字符串 ItemModelDescription { 获取;放; } 公共小数 ItemUnitPrice { 获取;放; } } 这两个是我试图检索的内容
  • 嗨@JeffreyEstrera,看看我的更新,我可以得到价值。另外,如果你想得到他quantity的值,第一个字母需要是小写的value.quantity
【解决方案2】:

可能是您的 js 在文档上传之前正在运行吗?尝试将您的函数放入 document.onload 或 window.onload (不确定我使用 js 和 Web 应用程序已经有一段时间了)

【讨论】:

  • 是的,它在文档上传之前运行,但仍然无法正常工作。我在这里搜索我的问题,但似乎找不到与我相似的问题。
猜你喜欢
  • 2011-03-15
  • 2020-08-23
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 2011-03-16
  • 2015-07-19
相关资源
最近更新 更多