Asp.net mvc ASP MVC HTML表单发布列表<;实体>;
今天我整天都在为同样的问题而挣扎。我仍然是ASP MVC初学者,来自Flex世界。但是现在我正在做一些ASP MVC项目 我认为这是一个相当复杂的问题,因此我试图非常详细地描述这个问题。所以,提前谢谢你,你正在谈论的时间,通过这一点 系统描述: 我正在尝试建立一个“项目管理系统”。您可以有多个项目,其中每个项目都有名称和说明。一个项目也有一个附加细节的列表。一个普通的表单可以让我输入一个新项目的名称和描述,对吗 现在,要求是,可以添加额外的表单元素。例如,我想添加一个新的输入,它将允许我输入所有现有和新项目的可用预算 预算是一个额外的项目细节。也就是说,当添加预算的a from元素时,将向所有项目添加新的项目详细信息 课程: 我得到了一个“Project”类,它有一个“ProjectDetails”列表,它还提供了一些从“Project”中获取、添加和删除“ProjectDetails”的接口: 注意,“ProjectDetail”从“ProjectItem”基类继承名称和值 我正在尝试创建视图,该视图将允许我编辑特定“项目”详细信息列表中所有“项目详细信息”的单值属性。 现在,每个“ProjectDetail”都与一个“FormElement”相关,并且它们通过名称属性进行匹配Asp.net mvc ASP MVC HTML表单发布列表<;实体>;,asp.net-mvc,list,post,reference,viewmodel,Asp.net Mvc,List,Post,Reference,Viewmodel,今天我整天都在为同样的问题而挣扎。我仍然是ASP MVC初学者,来自Flex世界。但是现在我正在做一些ASP MVC项目 我认为这是一个相当复杂的问题,因此我试图非常详细地描述这个问题。所以,提前谢谢你,你正在谈论的时间,通过这一点 系统描述: 我正在尝试建立一个“项目管理系统”。您可以有多个项目,其中每个项目都有名称和说明。一个项目也有一个附加细节的列表。一个普通的表单可以让我输入一个新项目的名称和描述,对吗 现在,要求是,可以添加额外的表单元素。例如,我想添加一个新的输入,它将允许我输入所有
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)
{
}
}
和“形式”类:
以下视图强类型为“ProjectEditModel”:
编辑项目
m、 项目名称)%%>
m、 项目名称)%%>
m、 项目说明)%>
m、 项目说明)%>
m、 Project.GetDetail(formElement.Name).Value)%%>
这将正确渲染,并为每个附加细节显示一个表单元素。但是当我发回模型时,构造函数将被调用,这样我就失去了所有引用。彭
我已经读到,MVC“只是工作”像这样,我愿意接受,但我如何解决我的问题呢?你还需要更多的信息吗
非常感谢,非常感谢您的帮助 MVC不会自动处理您尝试动态创建表单的方式。它不会将表单元素集合绑定到集合,因为它无法区分它们
请尝试中描述的方法来处理动态集合呈现和模型绑定。回发后,您能告诉服务器端希望得到什么吗?我真的不明白你的“构造函数将被调用,这样我就失去了所有引用”。你所说的构造器是什么?另外,您可以显示控制器操作代码吗?嗨,Andrey,我的意思是调用视图模型的构造函数,因此所有信息(引用)都将丢失。控制器中的POST-action方法将获得视图模型的新实例。知道它是什么样子并不重要。如果我没有在视图模型构造函数中创建一个新的“项目”,那么对“项目”的引用甚至将为空。当我首先将视图模型传递给视图时,我确保视图模型的属性已正确填充。
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")
{
}
}
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<FormElement> FormElements { get; set; }
public Form(string name)
{
Name = name;
FormElements = new List<FormElement>();
}
public Form()
: this("unknownWebform")
{
}
//public interface for getting, adding, deleting FormElement
}
public class ProjectEditModel
{
public Form Form;
public Project Project;
public ProjectViewModel() {}
}
<% using (Html.BeginForm("Edit", "Project", FormMethod.Post))
{%>
<div>
<fieldset>
<legend>Edit Project</legend>
<div class="editor-label">
<%: Html.LabelFor(m => m.Project.Name) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(m => m.Project.Name)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(m => m.Project.Description)%>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(m => m.Project.Description)%>
</div>
<%
foreach (var formElement in Model.Form.FormElements)
{
if (formElement.Type.Equals(Domain.Model.FormElement.TYPE_CHAR))
{
%>
<div class="editor-label">
<%: Html.Label(Model.Project.GetDetail(formElement.Name).Name)%>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(m => m.Project.GetDetail(formElement.Name).Value)%>
</div>
<%
}
if (formElement.Type.Equals(Domain.Model.FormElement.TYPE_NUMERIC))
{
}
}
%>
<p>
<input type="hidden" name="Id" value="<%: Model.Project.Id %>" />
<input type="submit" value="Save" />
</p>
</fieldset>
</div>
<% } %>