datatable.select 在带有 javascript 参数的 cshtml 中

datatable.select in cshtml with javascript parameter

我的型号代码

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
}

its giving me error 'cat ' does not exist in current context

如果我尝试

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: Cannot convert lambda expression to type 'string' because it is not a delegate type

<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() 就会被调用

我只需要 select 数据表中的条件,其中我 select 类别具有 javascript 变量传递

如何在 datatable.select

中传递我的 javascript 变量

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

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

以下假设 dtWrkTsk 是包含 属性 string Category 的模型的集合,并且您希望将集合归档到 return 只有 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