首页 > 解决方案 > 如何将 ViewModel 从 MVC Html 传递给 Jquery?

问题描述

我有一个 cshtml 文件,它用于来自控制器的模型值的每个循环。我的 cshtml 代码如下:-


<tbody>
                                @foreach (var item model.TechnicianInvoice)
                                {
                                    <tr>
                                        <td>@item.Name</td>
                                        @foreach (var rate in item.Rates)
                                        {
                                            <td class="td10"><span class="prefix">$</span><input  type="text" class="form-control my-input" value="@rate.Rate.ToString("0.00")"></td>
                                        }
                                        <td><a class="btn btn-sm" href="#" data-action="ShowPayTableModal" data-id="@item.Id" name="@item.Name">view</a></td>
                                        <td><a class="updateRate" data-id="@item">update</a></td>
                                    </tr>
                                }
</tbody>

并且model.TechnicianInvoice是一个视图模型:

public class TechnicianInvoiceViewModel
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<TechRateViewModel> Rates { get; set; }
    }
    public class TechRateViewModel
    {
        public int Id { get; set; }
        public double Rate { get; set; }
    }

现在我需要的是当我点击更新按钮时,当前的 foreach 值model.Technician应该被传递到 jquery 中。目前我正在使用data-id = @item,但是当我在控制台登录时,这个值只显示 TechnicianInvoiceViewModel 。我的jQuery代码是

 $(".updateRate").on("click", function () {
                var data = $(this).attr("data-id");
                console.log(data);
});

我怎样才能做到这一点?

标签: javascriptjqueryasp.net-mvcrazor

解决方案


问题在于您想将 C# 模型解析为 Javascript。执行此操作时data-id = @item,会要求 C# 提供项目的字符串值。但是你期望这个值是多少?身份证?那你应该去data-id = @item.Id。但是还有很多其他选项,也可以通过实现返回例如 JSON @item.getJSON()...

长话短说:您需要指定要解析为 JavaScript 的项目的哪个值;)


推荐阅读