mvc html post参数,ASP MVC HTML表单POST列表<Entity>

今天我一直在努力解决同一个问题。我仍然是来自Flex世界的ASP MVC初学者。但是现在我正在研究一些ASP MVC项目。ASP MVC HTML表单POST列表

我认为这是一个相当复杂的问题,因此我试图描述非常详细的问题。所以,提前谢谢你,你正在谈论时间来通过这个!

系统介绍:

我试图建立一个 “ProjectManagementSystem”。您可以有多个项目,其中每个项目都有一个名称和一个说明。一个项目也有一个额外的细节清单。一个正常的表格会让我输入新项目的名称和描述,对吗?

现在,需求是,可以添加额外的表单元素。例如,我想添加一个新的输入,它可以让我输入所有现有和新项目的可用预算。

预算是一个额外的项目细节。 IE浏览器。当预算的a from元素被添加时,新的项目细节将被添加到所有项目中。

类:

我得到了类“项目”具有“ProjectDetails”的列表,它也提供了一些接口获取,添加并从“项目”删除“ProjectDetail”:

public class Project : ProjectItem

{

public virtual IList Details { get; set; }

public Project(string name, string description) : base(name, description)

{

Details = new List();

}

public Project()

: this("new project", "this is a new project")

{

}

public virtual void AddDetail(string name)

{

var detail = GetDetail(name);

if (detail == null)

{

detail = new ProjectDetail(name, "empty");

detail.Project = this;

Details.Add(detail);

}

}

public virtual void RemoveDetail(string name)

{

var detail = GetDetail(name);

if (detail != null)

{

detail.Project = null;

Details.Remove(detail);

}

}

public virtual ProjectDetail GetDetail(string name)

{

ProjectDetail result = null;

foreach (ProjectDetail detail in Details)

{

if (detail.Name.Equals(name))

{

result = detail;

}

}

return result;

}

}

的 “ProjectDetail” 类看起来是这样的:

public class ProjectDetail : ProjectItemDetail

{

[NotNull]

public virtual Project Project { get; set; }

public ProjectDetail(string name, string value)

: base(name, value)

{

}

public ProjectDetail()

: this("new project detail", "empty")

{

}

}

注意,认为 “ProjectDetail” 继承名称和值f rom“ProjectItem”基类。

我想创建视图,这将让我编辑特定“项目”的详细信息列表中的所有“ProjectDetails”的单个Value属性。 现在,每个“ProjectDetail”都与一个“FormElement”相关联,并且它们的Name属性相匹配。

public class FormElement

{

public static string TYPE_UNKNOWN = "typeUnknown";

public static string TYPE_NUMERIC = "typeNumeric";

public static string TYPE_CHAR = "typeChar";

public static string TYPE_DATE = "typeDate";

[NotNull]

public virtual string Name { get; set; }

[NotNull]

public virtual int Position { get; set; }

[NotNull]

public virtual string Type { get; set; }

[NotNull]

public virtual Form Form { get; set; }

public FormElement(string name, int position, string type)

{

Name = name;

Position = position;

Type = type;

}

public FormElement()

: this("unknownFormElement", -1, TYPE_UNKNOWN)

{

}

}

与“表”类:

public class Form : Entity

{

[NotNull]

public virtual string Name { get; set; }

public virtual IList FormElements { get; set; }

public Form(string name)

{

Name = name;

FormElements = new List();

}

public Form()

: this("unknownWebform")

{

}

//public interface for getting, adding, deleting FormElement

}

因此,认为将需要渲染的“表”,并填充相关的“ProjectDetail”的价值元素。

因此,鉴于被传递的“ProjectEditModel”:

public class ProjectEditModel

{

public Form Form;

public Project Project;

public ProjectViewModel() {}

}

以下几种观点是强类型为“ProjectEditModel”:

{%>

Edit Project

m.Project.Name) %>

m.Project.Name)%>

m.Project.Description)%>

m.Project.Description)%>

foreach (var formElement in Model.Form.FormElements)

{

if (formElement.Type.Equals(Domain.Model.FormElement.TYPE_CHAR))

{

%>

m.Project.GetDetail(formElement.Name).Value)%>

}

if (formElement.Type.Equals(Domain.Model.FormElement.TYPE_NUMERIC))

{

}

}

%>

这将正确渲染和显示表单元素为每一个额外的细节。但是当我做POST回模型时,构造函数会被调用,这样我就会释放所有的引用。彭!

我已经阅读过,MVC“正常工作”就像这样,我愿意接受,但我该如何解决我的问题呢?你需要更多的信息?

非常感谢,非常感谢帮助!

+0

你能告诉你回邮后你期望在服务器端得到什么?我不是真的得到你的“构造函数会被调用,这样我就会丢失所有的引用”。你在说什么构造函数? 另外,你可以显示你的控制器动作码吗? –

2010-12-13 21:42:31

+0

嗨安德烈,我的意思是调用视图模型的构造函数,所以所有的信息(引用)都会丢失。控制器中的POST操作方法将传递视图模型的新实例。知道它的样子并不重要。如果我不在视图模型构造函数中创建新的“项目”,则对“项目”的引用将甚至为空。我确保视图模型的属性在我首先将其传递给视图时正确填充。 –

2010-12-14 15:30:18

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值