【问题标题】:datatable.select in cshtml with javascript parameter带有javascript参数的cshtml中的datatable.select
【发布时间】:2017-07-20 21:37:45
【问题描述】:

我的型号代码

public class viewCase
{
  public List<string> lstCategory   { get; set; }
  public DataTable dtWrkTsk { get; set; }
}

我的控制器代码

string query = "SELECT WorkFlowID,Subject,Category FROM CMSTasksWorkFlow" 

objcase.dtWrkTsk   = objdataclas.ExecuteDataTable(query);

return View("../ViewCases/CasesScreen",objcase);

我的cshtml代码

 function getCaption() {

var cat=    $("#layout option:selected").text();  //variable for select condition

var arr =  @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(
Model.dtWrkTsk.Select("Catagory='" + cat + "'") ));  //<- error here
}

它给我的错误“猫”在当前上下文中不存在

如果我尝试

function getCaption() {

      var cat=    $("#layout option:selected").text();  //variable for select condition
     var arr =  @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(
       Model.dtWrkTsk.Select("Catagory='" +@<text> cat </text> + "'") ));}  //<- error here

CS1660:无法将 lambda 表达式转换为类型“字符串”,因为它 不是委托类型

<div id="addTask" class="modal fade " aria-hidden="true">
        <div class="modal-dialog">
            <div class="modal-content round">
                <div class="modal-header"><h4>New Task </h4></div>
                <div id="tbody" class="modal-body" style="height:20%">
                    @Html.DropDownList("layout", Model.lstCategory.Select(m => new SelectListItem { Text = m, Value = m }), "All", new { onclick = "getCaption()" })
                    <div id="dtask" style="width: 80%; overflow: scroll; ">

                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" data-dismiss="modal" class="btn btn-primary"  >OK</button>
                    <button type="button" data-dismiss="modal" class="btn">Cancel</button>
                </div>
            </div>
        </div>
    </div>

我试图保持数据表与服务器断开连接,因此每当用户更改Html.DropDownList 中的值时,函数getCaption() 就会被调用

我只需要在数据表中选择条件,在其中选择带有 javascript 变量传递的类别

如何在 datatable.select 中传递我的 javascript 变量

【问题讨论】:

  • 你在$(document).ready()里面使用你的JS代码吗?还提供有关您的代码的更多详细信息。
  • @ElmerDantas:已编辑问题
  • 您的问题不清楚,也没有回答我的问题,但是,如果我不明白您想要什么,请检查thisthis,然后选择最适合您的问题
  • 我在这里要做的是,当用户更改下拉列表中的值时,我有一个数据表和下拉列表,我需要使用 datatable.select("category='" + javascriptvar + " 从我的数据表中过滤数据'") 但这里的问题是这个 datatable.select 在我的 cshtml 文件中,它给了我错误,因为 datatable 来自模型,是的 getCaption 是我的 javascript 函数
  • 你为什么要在客户端过滤数据表?对不起,我做你想做的事没有任何意义。

标签: javascript c# asp.net-mvc razor


【解决方案1】:

var arr = @Html.Raw(...) 中的@Html.Raw() 是剃须刀代码,它在发送到视图之前在服务器上进行解析。它包括一个 .Select() 查询,该查询使用了一个当时不存在的 javascript 变量 - 它不在范围内。

您需要将集合分配给 javascript 变量,并根据所选选项在 javascript 中过滤结果数组。

以下假设 dtWrkTsk 是包含属性 string Category 的模型的集合,并且您希望对集合进行归档以仅返回 Category 值与所选选项匹配的对象

@Html.DropDownList("layout", Model.lstCategory.Select(m => new SelectListItem { Text = m, Value = m }), "All")

@Html.DropDownList("layout", new SelectList(Model.lstCategory), "All")

<script>
    // Assign the collection to a javascript array
    var arr = @Html.Raw(Json.Encode(Model.dtWrkTsk))
    $('#layout').change(function() {
        var selectedCategory = $(this).val();
        // Return all objects in the collection that match
        var result = $(arr).filter(function(index, item) {
            return item.Category === selectedCategory;
        });
        .... // do something with the results
    });
</script>

其他建议阅读-Unobtrusive JavaScript

【讨论】:

  • var arr = @Html.Raw(Json.Encode(Model.dtWrkTsk)) 给我序列化错误
  • 错误是什么?我假设它是一个循环引用,在这种情况下你需要改变你的视图模型。
  • 是的循环引用错误我在我的视图模型中改变了什么
  • 很容易修复。但是您需要编辑您的问题并显示主模型和dtWrkTsk 的模型,并指出您希望能够在视图中访问dtWrkTsk 的哪些属性。
  • 序列化DataTable 始终是个问题。创建一个视图模型,比如 CMSTasksWorkFlowVM 包含 3 个属性(WorkFlowIDSubjectCategory)并将您的 DataTable 投影到该视图模型的集合中,以便主模型中的属性变为 @ 987654338@
猜你喜欢
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 2020-07-25
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 2017-10-21
  • 2012-11-17
相关资源
最近更新 更多