标签: asp.net-mvc-viewmodel

带有子接口的ASP.NET MVC 4 ViewModel

有没有办法在没有自定义模型绑定的情况下处理这个问题?

public class MyViewModel {
  public string UserId { get; set; }
  public IJob Job { get; set; }
}

public interface IJob {
  public long Id { get; set; }
  public string CompanyName { get; set; }
}

public class FullTimeJob : IJob {
  // omitted for brevity
}

public class Internship : IJob {
  // omitted for brevity
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我在默认模型绑定器中遇到错误,因为它不了解实例化IJob的实现.当我创建MyViewModel时,我将FullTimeJob的实例设置为其Job属性.我猜ASP.NET不能保留实现类型?

什么是最佳实践解决方案?

c# asp.net asp.net-mvc-4 asp.net-mvc-viewmodel

7
推荐指数
1
解决办法
1337
查看次数

MVC 5 ViewModel不像在MVC 4中那样工作

我会尽力直截了当.我在StackOverflow上有一些构建ViewModel的帮助.它在MVC 4中运行良好但现在我将应用程序转换为MVC 5它无法正常工作.代码方式没有任何改变.我有一个_navigation.cshtml,它是在我的Layout.cshtml中呈现的部分,并且错误在该Partial中的For循环内.这个代码在MVC 4中工作正常.这是代码:

我的错误是在for循环期间的部分页面中,我Ingredient在行中得到错误:

@foreach (Ingredient ingredient in Model.Ingredients)
Run Code Online (Sandbox Code Playgroud)

也可以在同一个地方的任何其他地方循环.错误说:

找不到类型或命名空间名称'Recipe'(您是否缺少using指令或程序集引用?)

这是我的代码:

型号/ Ingredient.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    namespace XXX.Models
    {
        public class Ingredient
        {
            public int IngredientID { get; set; }
            public string IngredientNameEs { get; set; }
        }
    }
Run Code Online (Sandbox Code Playgroud)

型号/ Recipe.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    namespace XXX.Models
    {
        public class Recipe
        {
            public int RecipeID { get; set; }
            public string RecipeNameEs { get; set; }
        } …
Run Code Online (Sandbox Code Playgroud)

c# runtime-error asp.net-mvc-4 asp.net-mvc-viewmodel asp.net-mvc-5

7
推荐指数
2
解决办法
4890
查看次数

在局部视图中呈现的模型属性值不正确

我有一个强类型的局部视图,其模型包含一个与父页面视图模型同名的属性.出于某种原因,渲染引擎渲染父视图模型值,而不是预期值(嗯,至少我期望的值!)

父页面视图模型提取:

public class ParentPageViewModel
{
    public int Id { get; set; } // problem property
    ...
    public IEnumerable<ChildViewModel> Children { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

子页面视图模型提取:

public class ChildViewModel
{
    public int Id { get; set; } // problem property
    ...
}
Run Code Online (Sandbox Code Playgroud)

父页面提取(Razor):

@model ParentPageViewModel
...
@foreach (var item in Model.Children)
{
    @Html.Partial("MyPartialView", item)
}
...
Run Code Online (Sandbox Code Playgroud)

部分视图提取:

@model ChildViewModel
...
<form ...>
    @Html.HiddenFor(m => m.Id) // problem here - get ParentPageViewModel.ID not ChildViewModel.Id
</form>
...
Run Code Online (Sandbox Code Playgroud)

所以基本上在我的渲染输出中,我的隐藏字段具有父视图模型元素的值,而不是传递给局部视图的值.它肯定是由名称引起的,因为将@ ChildViewModel.Id @的名称更改为类似@ ChildViewModel.ChildId @的内容使其按预期工作.有趣的是,在检查调试器中的视图模型值时,我确实看到了正确的值; …

c# asp.net-mvc partial-views razor asp.net-mvc-viewmodel

6
推荐指数
1
解决办法
3223
查看次数

ASP.NET MVC具有嵌套视图模型和Knockout

无法让我的大脑围绕如何为以下ASP.NET MVC 4 嵌套视图模型实现knockout :

public class MyProfile
{
  public string Name { get; set; }

  public IList<VM1>   List1    { get; set; }
  public IList<VM2>   List2    { get; set; }
  ....
  public IList<VM10>  List10    { get; set; }
}
// example of VM view model
public class VM1
{
   IList<Label> Labels { get; set; }
   IList<Contact1> Contact1 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在视图中我接受这样的模型:

@model MyProfile

@using (Html.BeginForm("Index", "Profile", FormMethod.Post, new { id = "profileEditorForm" }))
{

  @Html.ValidationSummary(false)
    <fieldset>
  <legend>User's …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc viewmodel knockout-2.0 knockout.js asp.net-mvc-viewmodel

6
推荐指数
1
解决办法
2270
查看次数

MVC View ViewModel HttpPost返回值始终为NULL

我通过表单HttpPost将ViewModel从我的View传递回Controller.但是,返回的值始终为NULL.

视图模型

public class vmCompanyAddress
{
    public StatelyTechAdmin.Models.Company Company { get; set; }
    public StatelyTechAdmin.Models.CompanyAddress Address { get; set; }

    public SelectList Counties { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

公司类模型

public class Company
{
    [Key]
    public virtual long CompanyId { get; set; }

    [Required]
    [Display(Name = "Company Name")]
    public virtual string Name { get; set; }

    public virtual DateTime CreatedDate { get; set; }

    public virtual IEnumerable<CompanyAddress> CompanyAddresses { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

CompanyAddress类模型

public class CompanyAddress
{
    [Key]
    public virtual …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc razor asp.net-mvc-4 asp.net-mvc-viewmodel

6
推荐指数
2
解决办法
1万
查看次数

为什么我的ViewModel在[HttpPost]上为空?.NET MVC 3

我正努力在我的Web应用程序中正确使用ViewModels,但我遇到了各种各样的问题.其中之一是,如果我在使用Create操作发布后立即设置断点,则我的viewModel没有存储任何表单值.我一定做错了什么,但我尝试了一些事情.包括下面的代码,我将表单项命名为与viewModel字段相同,以查看是否有帮助.

我也想知道你的viewmodel中应该代表什么属性.我见过人们在博文中使用不同的东西和诸如此类的东西.

如果视图将呈现一个选择列表,那么我认为viewmodel应该为此保存一个IEnumerable SelectListItem,如下所示.然而,我看到人们使用IEnumerable Entity来表示选择列表所代表的类型.

任何人都可以为我阐明这一点吗?我昨晚取消了整个业务逻辑,所以我可以重新开始尝试并正确地完成它.

我的ViewModel:

public class ServerCreateViewModel
{
    public int Id { get; set; }

    // CompanyName represents a field in the Company model. I did this to see if
    // it would help with model binding. Beforehand it was Companies to represent the type. I've done the same for the rest of them, so I wont comment on this again.
    public IEnumerable<SelectListItem> CompanyName { get; set; }

    // Represents the Game model.
    public IEnumerable<SelectListItem> GameTitle { …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc razor asp.net-mvc-viewmodel

5
推荐指数
1
解决办法
4756
查看次数

使用 MVC ASP.NET 将数据插入多个表

我是 MVC ASP.NET 新手。尽管这在过去可能已得到解决,但我仍然无法获得问题的完整解决方案。

问题:我有两张桌子
视频

列有:VideoID、FlimName、描述

视频详情

列有: VideoDetailsID 、 Actor 、 VideoID (来自表视频的外键)

我希望将数据从我的 MVC 模型插入到这两个表中。[首先插入Video Table ,然后 插入带有 VideoTable 主键的VideoDetails ,即 VideoID 也与VideoDetails Table 的记录一起插入]。

我已经找到了该问题的一些解决方案,但它似乎并没有合并成一个完整的解决方案。

我可以获得一些有关此问题的逐步解决方法的有用链接,或者有人可以帮助我解决此问题。

我已在该论坛上阅读过有关 ViewModel 方法的信息,但仍不清楚其功能和流程。请帮忙。

谢谢,

曼格什

asp.net-mvc master-detail asp.net-mvc-viewmodel

5
推荐指数
1
解决办法
9774
查看次数

使用asp.net mvc 4和EntityFramework的ViewModes是Point

我正在与自己辩论在使用Entity Framework的项目中创建ViewModel类的重点是什么?

我目前有一个使用EntityFramework的项目.我的解决方案基本上是这样的:

  • UI项目(包含控制器和视图)
  • 模型项目(包含EntityFramework模型)
  • 服务项目(包含与Model Project通信的服务类,用于将模型项目中的实体提供给UI项目)

我的控制器将实体框架直接创建的实体传递给视图.

这很好,很简单.

在过去,我会创建单独的视图模型类,并从EntityFramework创建的实体映射到这些视图模型.但现在我正在努力看到这一点.

我目前正在帮助实现一个项目,该项目从实体框架生成的实体映射到视图模型.它实际上使用AutoMapper来做到这一点.

现在这一切似乎都需要付出很多努力和代码.

我在这里错过了什么吗?

asp.net-mvc design-patterns entity-framework automapper asp.net-mvc-viewmodel

5
推荐指数
2
解决办法
4762
查看次数

将ODATA $ expand查询选项与WebAPI和ViewModel一起使用

这个问题非常相似,但没有给我我所需要的。

我正在使用Entity Framework6。我的数据库有两个表,Customers和CustomerTypes。我为每个创建了一个ViewModel。客户可以具有以下类型:

public class Customer
{
    public int CustomerID { get; set; }
    public string CustomerName { get; set; }
    public CustomerTypeViewModel CustomerType { get; set; }
}

public class CustomerTypeViewModel
{
    public int CustomerTypeID { get; set; }
    public string CustomerTypeDescription { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有一个Customer控制器,它公开了具有IQueryable返回类型的odata操作方法:

[HttpPost, Queryable(AllowedQueryOptions = AllowedQueryOptions.All)]
    public IQueryable<CustomerViewModel> GetCustomersMatchingCriteria([FromBody]ODataActionParameters parameters)
    {
        var criteria = (CustomerMassUpdateCriteriaViewModel)parameters["Criteria"];

        return Common.Customers.GetCustomerMassUpdateCriteriaResults(criteria,
            ConfigurationManager.AppSettings["CLIENT_ID"]).Select(
            c => new CustomerViewModel()
            {
                CustomerID = c.CustomerID,
                CustomerName = c.CustomerName,
                CustomerType = new …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework odata asp.net-web-api asp.net-mvc-viewmodel

5
推荐指数
1
解决办法
2059
查看次数

EmailAttribute在ASP.NET Core的ViewModel中无法正确验证

这是我的视图模型中的一个字段:

[Required(ErrorMessage = "Email is missing."), EmailAddress(ErrorMessage = "Email is not valid.")]
public string Email { get; set; }
Run Code Online (Sandbox Code Playgroud)

EmailAddress来自EmailAddressAttribute.EmailAddressAttribute()类型)
这是HTML的相关部分:

<div>
    <label for="inputEmail">EMAIL</label>
    <input id="inputEmail" ng-model="email" asp-for="Email" class="form-control" />
</div>
<div>
    <span asp-validation-for="Email" class="text-danger"></span>
</div>
Run Code Online (Sandbox Code Playgroud)

当我myemail在电子邮件文本框中键入内容时,会说

电邮无效

但是,在键入时myemail@email,视图模型会将其视为正确的(仅在前端)。

public async Task<JsonResult> Register([FromForm]VisitViewModel vm)
Run Code Online (Sandbox Code Playgroud)

这样正确的转换会使ModelStateon无效,并拒绝电子邮件,因此该部分还可以。

但是根据此答案,前端应将此表示为无效

有人可以解释这里发生了什么吗?我绝对不知所措。

c# email-validation asp.net-mvc-viewmodel asp.net-core-mvc asp.net-core

5
推荐指数
1
解决办法
3826
查看次数