ASP.Net MVC:如何将兴趣与每个学生关联起来

2024-04-17

我在学生和兴趣爱好之间建立联系时遇到了麻烦。我通过可编辑的网络网格显示我的数据。 webgrid 有名称文本框、国家/地区选择下拉菜单和爱好复选框。

我希望当用户选择每个学生的爱好...可能是一个或多个并按下提交按钮时,我应该能够从学生视图模型中了解每个学生的爱好。

由于缺乏知识,我无法做到这一点。

这就是我的用户界面的样子

这样我就在每一行网络网格中生成复选框。

    grid.Column(header: "Hobbies",
    format: @<text>
    @for (var i = 0; i < Model.Hobbies.Count; i++)
    {
        <div class="checkbox">
            @Html.HiddenFor(m => m.Hobbies[i].ID)
            @Html.HiddenFor(m => m.Hobbies[i].Name)
            @Html.CheckBoxFor(m => m.Hobbies[i].Checked)
            @Html.LabelFor(m =>m.Hobbies[i].ID, Model.Hobbies[i].Name)
        </div>
    }
    </text>)

我的完整剃须刀代码

@model MVCCRUDPageList.Models.StudentListViewModel
@{
    ViewBag.Title = "Index";
}

<h2>Student View Model</h2>

@using (Html.BeginForm("Index", "WebGridMoreControls", FormMethod.Post))
{
    var grid = new WebGrid(Model.Students, canSort: false, canPage: false);
    var rowNum = 0;
    var SelectedHobbies = 0;

    <div id="gridContent" style=" padding:20px; ">
        @grid.GetHtml(
        tableStyle: "table",
        alternatingRowStyle: "alternate",
        selectedRowStyle: "selected",
        headerStyle: "header",
        columns: grid.Columns
        (
            grid.Column(null, header: "Row No", format: item => rowNum = rowNum + 1),
            grid.Column("ID", format: (item) => @Html.TextBoxFor(m => m.Students[rowNum - 1].ID, new { @class = "edit-mode" })),
            grid.Column("Name", format: (item) => @Html.TextBoxFor(m => m.Students[rowNum - 1].Name, new { @class = "edit-mode" })),

             grid.Column("Country", format: (item) =>
                  @Html.DropDownListFor(x => x.Students[rowNum - 1].CountryID,
                  new SelectList(Model.Country, "ID", "Name", item.CountryID),
                 "-- Select Countries--", new { id = "cboCountry", @class = "edit-mode" })),

            grid.Column(header: "Hobbies",
            format: @<text>
            @for (var i = 0; i < Model.Hobbies.Count; i++)
            {
                <div class="checkbox">
                    @Html.HiddenFor(m => m.Hobbies[i].ID)
                    @Html.HiddenFor(m => m.Hobbies[i].Name)
                    @Html.CheckBoxFor(m => m.Hobbies[i].Checked)
                    @Html.LabelFor(m =>m.Hobbies[i].ID, Model.Hobbies[i].Name)
                </div>
            }
            </text>)
        ))

        <input type="submit" value="Submit" />
    </div>

}

我的控制器和操作代码

public class WebGridMoreControlsController : Controller
{
    // GET: WebGridMoreControls
    public ActionResult Index()
    {
        StudentListViewModel osvm = new StudentListViewModel();
        return View(osvm);
    }

    [HttpPost]
    public ActionResult Index(StudentListViewModel oStudentListViewModel)
    {
        return View(oStudentListViewModel);
    }
}

我的视图模型代码

public class StudentListViewModel
{
    public IList<Student> Students { get; set; }
    public List<Country> Country { get; set; }

    public IList<Hobby> Hobbies { get; set; }

    public StudentListViewModel()
    {
        Students = new List<Student>
        {
            new Student{ID=1,Name="Keith",CountryID=0},
            new Student{ID=2,Name="Paul",CountryID=2},
            new Student{ID=3,Name="Sam",CountryID=3}
        };

        Country = new List<Country>
        {
            new Country{ID=1,Name="India"},
            new Country{ID=2,Name="UK"},
            new Country{ID=3,Name="USA"}
        };

        Hobbies = new List<Hobby>
        {
            new Hobby{ID=1,Name="Football",Checked=false},
            new Hobby{ID=2,Name="Hocky",Checked=false},
            new Hobby{ID=3,Name="Cricket",Checked=false}
        };

    }
}

我的型号代码

public class Student
{
    public int ID { get; set; }
    [Required(ErrorMessage = "First Name Required")]
    public string Name { get; set; }
    //[Required(ErrorMessage = "Last Name Required")]
    //public string LastName { get; set; }

    public int CountryID { get; set; }

}

public class Country
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class Hobby
{
    public int ID { get; set; }
    public string Name { get; set; }
    public bool Checked { get; set; }
}

请帮助我实现我想要实现的目标。谢谢

EDIT 1

    @for (var i = 0; i < Model.Hobbies.Count; i++)
    {
        <div class="checkbox">
            @Html.HiddenFor(m => m.Hobbies[i].ID)
            @Html.HiddenFor(m => m.Hobbies[i].Name)
            @Html.HiddenFor(m => m.Students[rowNum - 1].Hobbies[i].ID)
            @Html.CheckBoxFor(m => m.Students[rowNum - 1].Hobbies[i].Checked)
            @*@Html.CheckBoxFor(m => m.Hobbies[i].Checked)*@
            @Html.LabelFor(m =>m.Hobbies[i].ID, Model.Hobbies[i].Name)
        </div>
    }

我可以重构我的视图模型、模型和剃刀视图代码。在这里我想提供我的更新后的代码,该代码工作正常。

这样我在 for 循环中生成复选框。

grid.Column(header: "Hobbies",
format: @<text>
@for (var i = 0; i < Model.Students.FirstOrDefault().Hobbies.Count; i++)
{
    <div class="checkbox">
        @Html.HiddenFor(m => m.Students[rowNum - 1].Hobbies[i].ID)
        @Html.HiddenFor(m => m.Students[rowNum - 1].Hobbies[i].Name)
        @Html.CheckBoxFor(m => m.Students[rowNum - 1].Hobbies[i].Checked)
        @Html.LabelFor(m => m.Students[rowNum - 1].Hobbies[i].Name, Model.Students.FirstOrDefault().Hobbies[i].Name)
    </div>
}
</text>)

查看模型和模型类代码

public class StudentListViewModel
{
    public IList<Student> Students { get; set; }
    public List<Country> Country { get; set; }



    public StudentListViewModel()
    {
        Students = new List<Student>
        {
            new Student
            {
                ID=1,Name="Keith",CountryID=0,
                Hobbies= new List<Hobby>
                {
                    new Hobby{ID=1,Name="Football",Checked=false},
                    new Hobby{ID=2,Name="Hocky",Checked=false},
                    new Hobby{ID=3,Name="Cricket",Checked=false}
                }

            },

            new Student
            {
                ID=2,Name="Paul",CountryID=2,
                Hobbies= new List<Hobby>
                {
                    new Hobby{ID=1,Name="Football",Checked=false},
                    new Hobby{ID=2,Name="Hocky",Checked=false},
                    new Hobby{ID=3,Name="Cricket",Checked=false}
                }
            },

            new Student
            {
                ID=3,Name="Sam",CountryID=3,
                Hobbies= new List<Hobby>
                {
                    new Hobby{ID=1,Name="Football",Checked=false},
                    new Hobby{ID=2,Name="Hocky",Checked=false},
                    new Hobby{ID=3,Name="Cricket",Checked=false}
                }
            }
        };

        Country = new List<Country>
        {
            new Country{ID=1,Name="India"},
            new Country{ID=2,Name="UK"},
            new Country{ID=3,Name="USA"}
        };

    }
}

型号代码

public class Student
{
    public int ID { get; set; }
    [Required(ErrorMessage = "First Name Required")]
    public string Name { get; set; }
    //[Required(ErrorMessage = "Last Name Required")]
    //public string LastName { get; set; }

    public int CountryID { get; set; }
    public IList<Hobby> Hobbies { get; set; }

}


public class Country
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class Hobby
{
    public int ID { get; set; }
    public string Name { get; set; }
    public bool Checked { get; set; }
}

再次以不同的方式完成

我还使用 html 表开发了相同的 UI。在这里我分享剃刀代码,模型和模型视图代码的其余部分与以前相同。

@model MVCCRUDPageList.Models.StudentListViewModel
@{
    ViewBag.Title = "Index";
}

<h2>CREATE TABULAR UI WITH HTML TABLE</h2>

@using (Html.BeginForm("Index", "HtmlTable", FormMethod.Post))
{
    <div class="form-group">
        <div class="col-md-12 table-responsive">
            <table class="table table-bordered table-hover">
                <tr>
                    <th>
                        Row No
                    </th>
                    <th>
                        ID
                    </th>
                    <th>
                        Name
                    </th>
                    <th>
                        Country
                    </th>
                    <th>
                        Hobbies
                    </th>
                    <th>
                        Sex
                    </th>
                </tr>
                }
                @for (int x=0; x<=Model.Students.Count-1;x++)
                {

                    <tr>
                        <td>
                            <label>@(x+1)</label>
                        </td>
                        <td>
                            @Html.TextBoxFor(m => m.Students[x].ID)
                        </td>
                        <td>
                            @Html.TextBoxFor(m => m.Students[x].Name)
                        </td>
                        <td>
                            @Html.DropDownListFor(m => m.Students[x].CountryID,
                              new SelectList(Model.Country, "ID", "Name",  Model.Students[x].CountryID),
                             "-- Select Countries--", new { id = "cboCountry", @class = "edit-mode" })
                        </td>
                        <td>
                            @for (var i = 0; i < Model.Students.FirstOrDefault().Hobbies.Count; i++)
                            {
                                <div class="checkbox">
                                    @Html.HiddenFor(m => m.Students[x].Hobbies[i].ID)
                                    @Html.HiddenFor(m => m.Students[x].Hobbies[i].Name)
                                    @Html.CheckBoxFor(m => m.Students[x].Hobbies[i].Checked)
                                    @Html.LabelFor(m => m.Students[x].Hobbies[i].Name, Model.Students[x].Hobbies[i].Name)
                                </div>
                            }

                        </td>
                        <td>
                            @for (var i = 0; i < Model.Sex.Count; i++)
                            {
                                <div class="checkbox">
                                    @Html.HiddenFor(m => Model.Sex[i].ID)
                                    @Html.HiddenFor(m => Model.Sex[i].SexName)
                                    @Html.RadioButtonFor(m => m.Students[x].SexID, Model.Sex[i].ID)
                                    @Html.LabelFor(m => m.Students[x].SexID, Model.Sex[i].SexName)
                                </div>
                            }
                        </td>
                    </tr>
                }
            </table>
        </div>

        <input type="submit" value="Submit" />
    </div>
}
  [1]: https://stackoverflow.com/users/3559349/stephen-muecke
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.Net MVC:如何将兴趣与每个学生关联起来 的相关文章

  • 播种多对多数据

    您好 我正在尝试为我的项目创建一些种子 但我在将多对多关系数据播种到数据库时遇到问题 My database看起来像这样 in 教师技能 教师ID and Skill ID当然是他们的表的外键 My seeder看起来像这样 protect
  • 将 {sitename} 参数传递给 MVC 控制器操作

    我怎样才能检索站点范围的 URL 参数在路线中而不用参数使每个控制器操作混乱 我的问题类似于这个问题 https stackoverflow com questions 235118 asp net mvc route to usernam
  • 编辑用户个人资料详细信息

    如何创建用于编辑用户自定义信息的操作和视图 授权基于 VS 通过 MVC 4 项目创建的成员资格 我添加了其他列 例如 FirstName 等 我需要并且注册工作正常 但我不知道如何让此属性显示在视图中 Html EditorFor并将更改
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • 如何在Web网格的列中编写IF条件

    我在 WEB GRID 列中创建 if 条件时遇到错误 所以 请帮助改进我的代码并解决我的问题 grid Column Status format item gt
  • 绑定到 ViewModel 时如何更新 Model?

    我有一个 HttpPost 操作方法签名如下 HttpPost public ActionResult Edit ExistingPostViewModel model Save the edited Post 现在 在过去 当我没有使用
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • 如何使用 Error.cshtml 视图中的过滤器放入 ViewBag 的数据?

    我有一个操作过滤器 负责将一些通用信息放入 ViewBag 中 供共享 Layout cshtml 文件中的所有视图使用 public class ProductInfoFilterAttribute ActionFilterAttribu
  • PDF 在 Safari 中隐藏 Jquery Modal

    这是与我有关的事情this https stackoverflow com questions 24052681 pdf hide jquery modal in ie问题 在 IE 中 我在对话框中使用 iframe 解决了问题 所以它工
  • 在 ASP.NET Core 2.0 Web Api 中返回“原始”json

    AFAIK 在 ASP NET Core Web Api 中返回数据的标准方法是使用IActionResult并提供例如一个OkObject结果 这对于对象来说效果很好 但是如果我以某种方式获得了一个 JSON 字符串 并且我只想将该 JS
  • 将DataTable批量插入postgreSQL表中

    在 SQL 中 我们执行类似的操作来批量插入数据表 SqlBulkCopy copy new SqlBulkCopy sqlCon copy DestinationTableName strDestinationTable copy Wri
  • Azure 云服务在应用程序池回收后停止运行

    我部署了一个 Azure 云服务 WebRole WebAPI 只有一个实例 我注意到 如果我等待一些空闲时间 没有 HTTP 请求 那么稍后服务就会死掉 并且对它的每个请求都会导致以下响应 Message An error has occ
  • 尝试使用 VS 2012 打开我的 asp.net 4.5 MVC Web 应用程序时出错。Asp.net 尚未在服务器上注册

    我有一个Windows Server 2012 R2 Visual Studio 专业版 2012 现在我用来开发 ASP NET 4 5 MVC 4 Web 应用程序 没有任何问题 但现在当我尝试打开该项目时 我会收到此错误 如果我单击
  • 在操作之外执行异步操作 asp.net mvc

    我希望能够在每个请求上从云数据库加载用户 并使用 asp net mvc 在控制器中的请求上提供该用户 问题是当前框架不支持从操作过滤器执行异步操作 所以 OnActionExecuting OnAuthorization 方法不允许我这样
  • 无法将数据加载到 mvc 4 中的 jTable 中

    好的 我第一次尝试 jTable 我可以加载表 但这对我没有什么好处 因为它不会加载我的任何数据 当我调试程序时 我想要的表中的所有行都存储在我的列表中 因此我很困惑为什么当我运行应用程序时会弹出一个对话框 显示 与服务器通信时发生错误 H
  • ASP.NET MVC 中的经典 ASP (C#)

    我有一个应用程序想要 最终 转换为 ASP NET MVC 我想要进行全面的服务升级 到 ASP NET 但想要使用当前的 ASP 内容来运行当前的功能 这样我就可以在对新框架进行增量升级的同时升级小部分 该站点严重依赖于不太成熟的 VB6
  • 会话过期时将部分视图重定向到登录页面

    是否有一种简单的方法可以在会话过期后将整个页面 而不仅仅是部分视图 重定向到登录页面 我已尝试以下解决方案 但无法使其工作 Net MVC Partial View 会话过期时加载登录页面 https stackoverflow com q
  • 64 位 ASP.NET MVC 应用程序无法运行

    首先 我之前曾设法让我的一个 64 位测试 Web 应用程序在这台机器上运行 当我为这个项目制作原型时 我已经在 32 位环境中工作了几周 意识到我需要将应用程序切换到 64 位 当我这样做 在项目中将目标平台设置为 x64 并重新部署时
  • ASP.NET MVC3 应用程序可以在不更改特定代码的情况下托管在云中吗?

    我使用以下方法创建了一个 ASP NET Web 应用程序 ASP NET MVC 3 网络表单 Linq 到 SQL MS SQL Server 数据库 WCF 需要做什么才能将其托管在云服务上 我是否应该将其转换为 Azure 应用程序
  • 如何使用 ASP.NET MVC 编辑多选列表?

    我想编辑一个如下所示的对象 我希望用 UsersGrossList 中的一个或多个用户填充 UsersSelectedList 使用 mvc 中的标准编辑视图 我只得到映射的字符串和布尔值 下面未显示 我在 google 上找到的许多示例都

随机推荐

  • 我需要一个在 python 中使用面板重叠诅咒窗口的示例

    我正在寻找有关如何使用的示例curses panel保持重叠的窗口 我在这里找到了这个https mail python org pipermail python list 2001 April 105015 html https web
  • 在 MVC 中从同步调用异步而没有等待时,TPL 任务死锁

    我知道在同步 MVC 方法中调用异步方法 同时使用 Wait 或 Result 等待任务完成时 存在 TPL 死锁陷阱 但我们刚刚在 MVC 应用程序中发现了一个奇怪的行为 同步操作调用异步方法 但由于它是触发器 因此我们从未等待它完成 尽
  • 如何检查线程是否终止?

    线程什么时候到达终止地位 结束时是否会终止run 方法达到了 那么检查线程是否终止的正确方法是什么 因为以下条件对我来说似乎总是成立 if thread getState equals TERMINATED 有任何想法吗 First Thr
  • 如何读取 XML 文件的 php DOM 中的分隔符?

    我有一些 XML 文件 我必须读取它们并将其转换为 HTML XML 的格式是这样的
  • 使用 jQuery 拖放时保留元素的副本

    我正在使用 Jquery 拖放功能 并且我想保留正在拖动的元素的副本 draggable draggable revert invalid stack draggable helper clone droppable droppable a
  • Angular 4 多个字段的表单验证

    EDIT 我想要实现的是对单个 formControl 而不是整个表单的验证 验证器应该检查所有原子字段 如门牌号 街道等 然后使谷歌地图输入控件无效 我正在使用 Google 地图自动完成功能编写表单 用户应在触发 Google 地图自动
  • 如何正确处理httpStatuscode

    我想使用新功能 http api jquery com jQuery ajax 对 http 状态代码 如 200 201 或 202 做出反应 但该函数忽略了我的 201 和 202 回调 firefox 4 0 b10 和 chromi
  • 如何在matlab中检查字符串中的模式?

    我想检查字符串中是否存在特定模式来执行某些操作 filename pathname uigetfile fullpath pathname filename 在我的程序中 我只会浏览图片 所有图片都以该模式命名 cam1 jpg cam1
  • 更改特定 WooCommerce 电子邮件通知的发件人姓名和电子邮件地址

    如何在 WooCommerce 中更改特定电子邮件通知的电子邮件发件人地址和姓名 例如 更改发件人姓名和电子邮件地址仅用于客户处理订单电子邮件通知 但不适用于所有电子邮件通知 仅适用于特定电子邮件通知 发件人姓名和电子邮件地址在此处设置 在
  • 如何从 Mac OS 中的 SwiftUI 列表中删除底部/顶部项目填充

    我很难使用 SwiftUI 从 MacOS 中的单元格中删除所有填充 即使在苹果的代码中我似乎也无法做到这一点 https developer apple com tutorials swiftui creating a macos app
  • 在 TypeScript 中创建全局变量

    在 JavaScript 中我可以这样做 something testing 然后在另一个文件中 if something testing 它将有something被定义 只要它们以正确的顺序被调用 我似乎不知道如何在 TypeScript
  • WP7 难以将数据绑定到列表框项目源 - 不会刷新

    因此 我的 WP7 应用程序上有一个详细信息页面 其中显示了一个列表框 其中显示了我的应用程序中的一些数据 在代码隐藏中 我将列表框 itemssource 设置为对象集合 到目前为止非常简单 我在同一屏幕上还有几个文本框和一个按钮 可以让
  • 每个领域都有不同的分析仪

    如何为使用 Lucene 索引的文档中的每个字段启用不同的分析器 例子 RAMDirectory dir new RAMDirectory IndexWriter iw new IndexWriter dir new StandardAna
  • C# 如何选择歧义和参数

    假设我有以下方法 public static void MyCoolMethod params object allObjects public static void MyCoolMethod object oneAlone params
  • 以下新的重载是否会泄漏内存?

    我遇到过以下代码 class a public void operator new size t l int nb double values void a operator new size t l int n return new ch
  • jquery - css“transform:scale”影响 jquery 的“.offset()”

    我正在尝试用 jQuery 进行验证 之后会产生错误blur通过检查给定的事件是否发生input是空的 在此基础上 它将创建一个 div class errdiv 在那旁边input这将会有特定的错误 我用 offset获取该特定位置inp
  • 使用 AppCompat v22.1.0 时如何在 super.onCreate 之前设置ContentView?

    嘿 我刚刚将我的应用程序升级到 AppCompat v22 1 0 并收到此异常 Caused by java lang IllegalArgumentException AppCompat does not support the cur
  • smtpClient.send() 和 smtpClient.SendAsync() 之间的区别?

    我正在尝试从本地主机发送邮件 在这样做时 我从不同的站点获得了发送邮件的方法 但是在这样做时 我很困惑smtpClient send and smtpClient SendAsync 我想知道他们有什么不同 提前致谢 smtpClient
  • -s 和 -p 如何改变读取命令?

    我正在尝试解释这段代码 搜索谷歌看看这些命令的含义 但没有运气 我把我对每一行 块对我意味着什么的解释 如果我错了 请纠正我 我是 unix 命令新手 代码 bin bash input 1st command line argument
  • ASP.Net MVC:如何将兴趣与每个学生关联起来

    我在学生和兴趣爱好之间建立联系时遇到了麻烦 我通过可编辑的网络网格显示我的数据 webgrid 有名称文本框 国家 地区选择下拉菜单和爱好复选框 我希望当用户选择每个学生的爱好 可能是一个或多个并按下提交按钮时 我应该能够从学生视图模型中了