有没有办法在没有自定义模型绑定的情况下处理这个问题?
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不能保留实现类型?
什么是最佳实践解决方案?
我会尽力直截了当.我在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
我有一个强类型的局部视图,其模型包含一个与父页面视图模型同名的属性.出于某种原因,渲染引擎渲染父视图模型值,而不是预期值(嗯,至少我期望的值!)
父页面视图模型提取:
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 @的内容使其按预期工作.有趣的是,在检查调试器中的视图模型值时,我确实看到了正确的值; …
无法让我的大脑围绕如何为以下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
我通过表单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) 我正努力在我的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) 我是 MVC ASP.NET 新手。尽管这在过去可能已得到解决,但我仍然无法获得问题的完整解决方案。
问题:我有两张桌子
视频
列有:VideoID、FlimName、描述
视频详情
列有: VideoDetailsID 、 Actor 、 VideoID (来自表视频的外键)
我希望将数据从我的 MVC 模型插入到这两个表中。[首先插入Video Table ,然后 插入带有 VideoTable 主键的VideoDetails ,即 VideoID 也与VideoDetails Table 的记录一起插入]。
我已经找到了该问题的一些解决方案,但它似乎并没有合并成一个完整的解决方案。
我可以获得一些有关此问题的逐步解决方法的有用链接,或者有人可以帮助我解决此问题。
我已在该论坛上阅读过有关 ViewModel 方法的信息,但仍不清楚其功能和流程。请帮忙。
谢谢,
曼格什
我正在与自己辩论在使用Entity Framework的项目中创建ViewModel类的重点是什么?
我目前有一个使用EntityFramework的项目.我的解决方案基本上是这样的:
我的控制器将实体框架直接创建的实体传递给视图.
这很好,很简单.
在过去,我会创建单独的视图模型类,并从EntityFramework创建的实体映射到这些视图模型.但现在我正在努力看到这一点.
我目前正在帮助实现一个项目,该项目从实体框架生成的实体映射到视图模型.它实际上使用AutoMapper来做到这一点.
现在这一切似乎都需要付出很多努力和代码.
我在这里错过了什么吗?
asp.net-mvc design-patterns entity-framework automapper asp.net-mvc-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
这是我的视图模型中的一个字段:
[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
asp.net-mvc ×6
c# ×5
razor ×3
asp.net ×1
asp.net-core ×1
automapper ×1
knockout-2.0 ×1
knockout.js ×1
odata ×1
viewmodel ×1