MVC 5 单个视图中的多个模型

2024-03-15

有人可以提供一个如何在一个视图中组合两个模型的示例吗?

目前我有一个名为 RecordCard 的页面,其中包含:

@model IEnumerable<WebApplication1.Models.Weight>

这是由 AccountController 中的以下代码提供的:

public ActionResult RecordCard()
{
    var UserId = User.Identity.GetUserId();
    var weightModel = from m in db.Weights where m.UserId == UserId select m;
    return View(weightModel);
}

RecordCard 页面还包含一个绑定到以下类的表单:

public class AddWeightModel
{
    [Required]
    [DataType(DataType.Text)]
    [Display(Name = "Stone")]
    public Nullable<short> Stone { get; set; }

    [Required]
    [DataType(DataType.Text)]
    [Display(Name = "Pound")]
    public Nullable<short> Pound { get; set; }
}

但是,这是两个具有不同用途的单独模型,因此如何组合成一个包含 IEnumerable 列表和表单元素集的单个模型,这些元素最终将正确发布到 AccountController 以使用以下代码将记录添加到数据库:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult RecordCard(Weight Model)
{
    if (ModelState.IsValid)
    {
        using (WebApplication1Entities db = new WebApplication1Entities())
        {
            Weight weight = new Weight();
            weight.UserId = User.Identity.GetUserId();
            weight.Stone = Model.Stone;
            weight.Pound = Model.Pound;
            weight.Date = System.DateTime.Now;

            db.Weights.Add(Model);
            db.SaveChanges();
        }
    }
    return View(Model);
}

我已经包括了下面的重量等级:

public partial class Weight
{
    public int Id { get; set; }
    public string UserId { get; set; }
    public Nullable<short> Stone { get; set; }
    public Nullable<short> Pound { get; set; }
    public Nullable<System.DateTime> Date { get; set; }
}

这里还有 WebApplication1 Entities 类,它将权重表声明为 Weights:

public partial class WebApplication1Entities : DbContext
{
    public WebApplication1Entities()
        : base("name=WebApplication1Entities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<Weight> Weights { get; set; }
}

请解释一下需要修改什么,以及无论我尝试阅读、遵循和实施什么,我似乎都遗漏了一些东西。

任何帮助将非常感激 :-)


我想说这是使用的一个很好的例子ViewModel这里。我会建议类似的东西 -

Create ViewModel以及两个班级的组成

public class AddWeightModel
{
    [Required]
    [DataType(DataType.Text)]
    [Display(Name = "Stone")]
    public Nullable<short> Stone { get; set; }

    [Required]
    [DataType(DataType.Text)]
    [Display(Name = "Pound")]
    public Nullable<short> Pound { get; set; }
}
....
public partial class Weight
{
    public int Id { get; set; }
    public string UserId { get; set; }
    public Nullable<short> Stone { get; set; }
    public Nullable<short> Pound { get; set; }
    public Nullable<System.DateTime> Date { get; set; }
}
.....
public class WeightViewModel
{
    public IList<AddWeightModel> AddWeightModel { get; set; }
    public Weight Weight { get; set; }
}

然后更改您的视图以接受视图模型 -

@model WeightViewModel

最后修改你的控制器以应对变化 -

public ActionResult RecordCard()
    {
        var UserId = User.Identity.GetUserId();
        var weightModel = from m in db.Weights where m.UserId == UserId select m;
        var viewModel = new WeightViewModel
        {
            Weight = weightModel,
            AddWeightModel = new List<AddWeightModel>(){}
        };
        return View(viewModel);
    }

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult RecordCard(WeightViewModel viewModel)
{
    Weight Model = viewModel.Weight;
    if (ModelState.IsValid)
    {
        using (WebApplication1Entities db = new WebApplication1Entities())
        {
            Weight weight = new Weight();
            weight.UserId = User.Identity.GetUserId();
            weight.Stone = Model.Stone;
            weight.Pound = Model.Pound;
            weight.Date = System.DateTime.Now;

            db.Weights.Add(Model);
            db.SaveChanges();
        }
    }
    return RedirectToAction("RecordCard");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC 5 单个视图中的多个模型 的相关文章

  • Visual Studio Publish 的动态文件夹名称

    是否可以在 VS 2017 中配置文件系统发布选项 以根据日期或增量构建版本部署到新文件夹 即 当我单击发布时 我希望它转到 MyApp v1 然后下次单击 MyApp V2 您可以使用一些宏 要执行日期 请使用此宏 System Date
  • 找不到文件“obj\Debug\OldProjectName.csproj.FileListAbsolute.txt”

    我正在尝试发布项目 工具 vs2010 但无法始终收到以下错误 我从另一个项目粘贴到我的项目文件 然后将命名空间 OldProjectName 更改为父项目 NewProjectName 但它仍然从某个地方获取有关旧项目的信息 我清理了解决
  • ASP.NET中如何获取当前域名

    我想在asp net c 中获取当前域名 我正在使用这段代码 string DomainName HttpContext Current Request Url Host 我的网址是localhost 5858但它只返回localhost
  • 验证仅适用于数组的第一项

    给定这个模型代码 Required Display Name Name public string Name get set 以下查看代码有效 Html LabelFor model gt model Name Html TextBoxFo
  • 向页面添加多个相同类型的用户控件

    已经有人问过与此类似的问题 但似乎没有一个问题能解决我的具体情况 这就是我正在尝试做的事情 我有一个管理学生信息的用户控件 即名字 姓氏 地址等 我有一个网页 表单 上面有一个按钮 添加学生 我想要完成的是每次单击后将新的 StudentI
  • 无法加载文件或程序集“App_Web_1btizmpz,

    我遇到以下错误 Could not load file or assembly App Web 1btizmpz Version 0 0 0 0 Culture neutral PublicKeyToken null or one of i
  • 无法加载文件或程序集“System.Security.Principal.Windows”

    解决方案已成功编译 但是当我将现有的类文件添加到项目中后 出现此错误 无法运行指定的任务可执行文件 csc exe 不能 加载文件或程序集 System Security Principal Windows 版本 4 0 1 0 文化 中性
  • 如何覆盖/更新当前由 IIS 提供服务的文件?

    问题 我的公司每月发布一份时事通讯 我将其托管在我们的内部网站上 我有一个供时事通讯作者上传最新版本的页面 作者上传最新的新闻通讯后 他会发送一封广播电子邮件来宣布新的新闻通讯 员工总是会检查新的时事通讯并向作者发送反馈以及需要进行的更正
  • 完全替换 ASP.Net 的会话

    ASP Net 会话对于传统的 WebForms 应用程序来说似乎很完美 但它们所做的一些事情对于现代 AJAX 和 MVC 应用程序来说是一个严重的问题 具体来说 访问 ASP Net 提供程序只有 3 种方法 锁定读和写 默认 会话被锁
  • 如何在不使用 CreateUser 的情况下在 ASP.NET 成员资格表中创建用户

    我想将用户和帖子从我正在使用的现有论坛迁移到 ASP NET 成员资格表 而不使用 CreateUser 基本上我想维护用户ID 以便当我迁移帖子时它们继续与正确的用户关联 有没有办法做到这一点 或者我最好只使用 CreateUser 然后
  • 消息在事务处理时未到达 MSMQ

    我在本地计算机中创建了一个私有 MSMQ 我使用以下 C 代码将消息发送到队列 当我将队列更改为事务性队列时 消息未到达 MSMQ 但是 Send 方法中没有抛出异常 我需要做出什么改变才能使其发挥作用 using System using
  • EF6 + Postgres 关系 dbo.AspNetUsers 不存在

    我一直在关注这篇关于使用 PostgreSQL 和 EF6 的文章http www jasoncavet com blog postgresql and entity framework 6 code first http www jaso
  • 将 cookie 设置为在会话结束时过期? ASP.NET

    我很惊讶我找不到任何答案 如何将 cookie 中的 sessionid 设置为在会话结束时过期 当浏览器关闭或用户一段时间不活动时 我发现的两个解决方案是 httpcookie Expires HttpContext Current Se
  • 使用内容安全策略防止 Internet Explorer 11 上的内联 JavaScript

    是否可以使用 ASP NET WebForm 上的 CSP 来阻止 Internet Explorer 11 上的内联 JavaScript 我知道 IE 11 不支持内容安全策略级别 2 但它支持级别 1 0 我尝试了很多方法 但没有明确
  • ASP NET Web API 路由模板

    我有一个名为 Agency 的实体 具有以下 api GET http localhost 37331 api agency start 1 limit 10 status 1 GET http localhost 37331 api ag
  • HttpResponse 过滤器不返回任何内容

    我编写了一个 HttpModule 用于拦截对 WebResource axd 处理程序的调用 以便我可以对 javascript 执行一些后处理 该模块包装 Response Filter 流以执行其处理并将其更改写入底层流 我遇到的问题
  • ASP.NET Web 服务中的 XML 文档中存在非法字符

    我要问并回答我自己的问题 我希望没人介意 但我认为这可能对其他人有用 如果您设置的 ASP NET Web 服务返回的对象包含对 XML 无效的字符 则在将对象序列化为 SOAP xml 并且客户端尝试反序列化该 xml 后 将会引发异常
  • SQL CE 天蓝色连接

    我正在使用 azure 发布 asp net 应用程序 当我在本地发布时 它工作正常 但在 Azure 上 与数据库相关的所有内容都没有显示 并收到 由于发生内部服务器错误 无法显示页面 想知道我的连接字符串是否有问题 http webly
  • OWIN 令牌身份验证 400 来自浏览器的 OPTIONS 错误请求

    我正在根据这篇文章对小型项目使用令牌身份验证 http bitoftech net 2014 06 09 angularjs token authentication using asp net web api 2 owin asp net
  • ASP.NET 5 (vNext) - 配置

    我正在尝试学习 ASP NET 5 我在 Mac OS X 上使用它 此时 我有一个如下所示的 config json 文件 配置 json AppSettings Environment dev DbSettings AppConnect

随机推荐