You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF数据库优先模式下用存储过程填充DataTable并绑定UserID

嘿,我来帮你搞定从存储过程取数据填充DataTable,还把UserID绑定到“View Details”按钮的需求~下面是具体的实现步骤:

1. 调整Controller代码,调用存储过程获取数据

首先在Index方法里,用Entity Framework数据库优先的方式调用存储过程,把返回的用户数据映射到ResourceViewModel的列表中。这里要注意,如果你的ViewModel原本只存单个用户的属性,我们可以直接把用户列表传给View,这样实现起来更简单:

public ActionResult Index()
{
    // 初始化你的EF上下文(替换成你实际的DbContext类名)
    using (var db = new YourDbContext())
    {
        // 调用存储过程,将结果映射为ResourceViewModel的集合
        var userList = db.Database.SqlQuery<ResourceViewModel>("GetAllUsers").ToList();
        
        // 把用户列表传给View
        return View(userList);
    }
}
2. 修改View,动态绑定数据并初始化DataTable

接下来把静态表格改成动态生成的,同时把UserID绑定到按钮的自定义data-userid属性上,方便后续点击时获取用户ID。另外别忘了引入jQuery和DataTables的资源,然后初始化表格:

@{
    ViewBag.Title = "用户列表";
    // 声明View的模型为ResourceViewModel的列表
    @model List<ResourceViewModel>
}

<!-- 引入DataTables的样式(如果项目里还没加) -->
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.4/css/jquery.dataTables.min.css">

<table class="table" id="dataTable">
    <thead>
        <tr>
            <th class="text-center">First Name</th>
            <th class="text-center">Last Name</th>
            <th class="text-center">Actions</th>
        </tr>
    </thead>
    <tbody>
        <!-- 循环遍历用户列表,动态生成表格行 -->
        @foreach (var user in Model)
        {
            <tr>
                <td>@user.FirstName</td>
                <td>@user.LastName</td>
                <td>
                    <button class="btn btn-xs btn-primary view-details-btn" 
                            data-toggle="modal" 
                            data-target="#exampleModal"
                            data-userid="@user.UserID">
                        View Details
                    </button>
                </td>
            </tr>
        }
    </tbody>
</table>

<!-- 引入jQuery和DataTables的脚本 -->
<script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
<script src="https://cdn.datatables.net/1.13.4/js/jquery.dataTables.min.js"></script>

<script>
    $(document).ready(function() {
        // 初始化DataTable,这里可以加你需要的配置,比如分页、搜索等
        $('#dataTable').DataTable({
            paging: true,
            searching: true,
            ordering: true,
            responsive: true
        });

        // 点击详情按钮时获取UserID的示例(你可以根据需求调整,比如传给模态框)
        $('.view-details-btn').click(function() {
            const userId = $(this).data('userid');
            console.log('当前点击的用户ID:', userId);
            // 这里可以把userId赋值给模态框里的隐藏域,或者发起AJAX请求获取用户详情
        });
    });
</script>
3. 关键注意点
  • 确保ResourceViewModel的属性名称和Users表的列名完全匹配(EF映射是大小写不敏感的,但一致更稳妥),这样才能正确映射存储过程返回的数据。
  • 如果是.NET Core版本的EF,调用存储过程的语法会稍有不同,改成:db.Set<ResourceViewModel>().FromSqlRaw("GetAllUsers").ToList();
  • 记得在项目中正确引入jQuery和DataTables的资源,如果已经引入过就不用重复加啦。

内容的提问来源于stack exchange,提问作者Odie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:39:57