C# 基于自定义模型创建强类型视图
我需要一个结合两个实体模型的视图。我创建了一个如下所示的类:C# 基于自定义模型创建强类型视图,c#,asp.net-mvc-3,visual-studio-2010,C#,Asp.net Mvc 3,Visual Studio 2010,我需要一个结合两个实体模型的视图。我创建了一个如下所示的类: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using FSDS.DataModels; namespace FSDS.WebUX.Models { public partial class ChainandJob { public
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using FSDS.DataModels;
namespace FSDS.WebUX.Models
{
public partial class ChainandJob
{
public ScheduleJobChain chain {get;set;} //this object has 6 properties
public ScheduleJob job {get;set;} //this object has 8 properties.
}
}
我使用创建脚手架创建了一个新的局部视图。这就是它给我的:
@model FSDS.WebUX.Models.ChainandJob
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>ChainandJob</legend>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
所有的田地都在哪里 VS不知道你的目标。在ChainandJob之后立即尝试添加
@EditorFor(m => m.chain.ChainProperty)
@ValidationMessageFor(m => m.chain.ChainProperty)
@EditorFor(m => m.job.JobProperty)
@ValidationMessageFor(m => m.job.JobProperty)
一切都会好起来的:
EditorFor将为您生成默认输出,如果您需要调整,请随意操作。VS不知道您的对象。在ChainandJob之后立即尝试添加
@EditorFor(m => m.chain.ChainProperty)
@ValidationMessageFor(m => m.chain.ChainProperty)
@EditorFor(m => m.job.JobProperty)
@ValidationMessageFor(m => m.job.JobProperty)
一切都会好起来的:
EditorFor将为您生成默认输出,如果您需要调整,请随意操作。您需要自己编写,例如:
@Html.EditorFor(model => model.ChainandJob.chain.Bla)
@Html.ValidationMessageFor(model => model.ChainandJob.chain.Bla)
@Html.EditorFor(model => model.ChainandJob.job.Bla)
@Html.ValidationMessageFor(model => model.ChainandJob.job.Bla)
等等
编辑
虽然我不是这样做的,但是您可以让VS为ScheduleJobChain创建一个编辑视图,为ScheduleJob创建另一个编辑视图,并将它创建的模板剪切为一个视图模型。不要忘记@Html.HiddenFormodel=>model.chain和job.chain.Id等。您需要自己编写,比如:
@Html.EditorFor(model => model.ChainandJob.chain.Bla)
@Html.ValidationMessageFor(model => model.ChainandJob.chain.Bla)
@Html.EditorFor(model => model.ChainandJob.job.Bla)
@Html.ValidationMessageFor(model => model.ChainandJob.job.Bla)
等等
编辑
虽然我不是这样做的,但是您可以让VS为ScheduleJobChain创建一个编辑视图,为ScheduleJob创建另一个编辑视图,并将它创建的模板剪切为一个视图模型。别忘了@Html.HiddenFormodel=>model.chain和job.chain.Id等你不想自己输入吗?@bobek如果我必须的话,这不会是世界末日,但我担心VS应该进行验证的所有接线等等,但你可以按照答案告诉你的去做,你会得到所有验证等等。仅仅因为它不是自动生成的,并不意味着你不能直接键入它。@bobek,我想他只是感到困惑,因为VS没有像你期望的那样在一个不那么抽象的模型上自动生成视图数据。这是关于VS的q-n,而不是关于C/ASP.NET MVC,但是没关系:你不想自己输入吗?@bobek如果必须的话,这不会是世界末日,但是我担心VS应该做验证的所有线路,诸如此类,但是你可以按照答案告诉你的去做,你会得到所有的验证等等。仅仅因为它不是自动生成的,并不意味着你不能直接键入它。@bobek,我想他只是感到困惑,因为VS没有像你期望的那样在一个不那么抽象的模型上自动生成视图数据。这是关于VS的q-n,而不是关于C/ASP.NET MVC,但是没关系:OP还需要向他/她的模型中添加数据注释,以便进行验证,我相信。@四十二我认为验证可以工作,只要他对公共字符串Bla{get;set;}说[必需]。如果字符串为空,它应该抛出验证错误。啊,是的,忘了他的模型后面有模型。您是对的:OP还需要向他/她的模型中添加数据注释,以便进行验证,我相信。@四十二我认为验证可以工作,只要他对公共字符串Bla{get;set;}说[必需]。如果字符串为空,它应该抛出验证错误。啊,是的,忘了他的模型后面有模型。你是对的:我相信你需要有m=>m.chain,你必须为chain和job中的每个字段都有一个编辑器,VS不会为你搭建这个框架。你是对的,我修复了,但我认为这并不重要,这家伙问的是概念,而不是技术。你可以特别弄清楚这个小细节-一旦你把你的概念集合起来,这是基础。我相信你需要有m=>m.chain,你必须为chain和job中的每个字段都有一个编辑器,VS不会为你搭建这个框架。你是对的,我已经修复了,但我认为这并不重要,这家伙在问这个概念,而不是技术。你可以弄清楚这个小细节,尤其是-一旦你把你的概念集合起来,这就是基础。