C# 使用来自“的数据更新模型”;不同的;视图-MVC
如何将新对象项添加到已在其他模型中创建的主视图模型中 我正在尝试向主视图模型中包含的列表添加一个新项 在添加此项之前,我需要有关此项属性的信息,因此我使用与包含必要输入字段的模型紧密关联的视图。我已经为这个视图创建了一个包含两个对象的包装器样式的模型。主视图的模型以及特定项的模型 型号C# 使用来自“的数据更新模型”;不同的;视图-MVC,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,如何将新对象项添加到已在其他模型中创建的主视图模型中 我正在尝试向主视图模型中包含的列表添加一个新项 在添加此项之前,我需要有关此项属性的信息,因此我使用与包含必要输入字段的模型紧密关联的视图。我已经为这个视图创建了一个包含两个对象的包装器样式的模型。主视图的模型以及特定项的模型 型号 public class MDTCompletedJobM : BaseM { ... public MDTPartMList PartsList { get; set; } ... } public cla
public class MDTCompletedJobM : BaseM
{
...
public MDTPartMList PartsList { get; set; }
...
}
public class MDTAddPartM
{
public MDTPartM Part { get; set; }
public MDTCompletedJobM CompletedJobM { get; set; }
public List<string> PartTypes { get; set; }
public MDTAddPartM()
{
Part = new MDTPartM();
PartTypes = (List<string>)ConfigurationManager.GetSection("MTDataPartTypeList");
}
}
公共类MDTCompletedJobM:BaseM
{
...
公共MDTPartMList PartsList{get;set;}
...
}
公共类MDTAddPartM
{
公共MDTPartM部分{get;set;}
公共MDTCompletedJobM CompletedJobM{get;set;}
公共列表部件类型{get;set;}
公共MDTAddPartM()
{
零件=新的MDTPartM();
PartTypes=(列表)ConfigurationManager.GetSection(“MTDataPartTypeList”);
}
}
因此,当从我的控制器调用视图时,我将我的主视图模型分配给该模型并将其传入。在“addpart”视图中,我使用一个Ajax post调用将该部分实际添加到此列表(CompletedJobM.PartsList)
这很好,只是我现在不知道如何让我的主视图在它的模型中意识到它的列表中有一个额外的项。此新项在添加到模型列表后不会“存储”在任何位置,因此无法重新加载主视图模型。我的Ajax帖子是:
$.ajax({
type: "POST",
cache: false,
url: '@Url.Action("AddPart", "Jobs")', //$(this).attr("action"),
data: $.toJSON(result),
contentType: 'application/json',
success: function (data) {
$("#progressdiv").html();
var isValid = $(data).find(".validation-summary-errors").length == 0;
if (isValid) {
var pwindow = $("#Window").data("tWindow");
pwindow.close();
$('.page').html(data); <- what to do here?
}
else {
$("#resultDiv").html(data);
}
},
beforeSend: function () {
$("#progressdiv").html('<image src=@Url.Content("~/Content/Images/ajax-loader.gif") alt="Loading, please wait" />');
},
error: function (xhtr, e) {
$("#progressdiv").html();
alert(xhtr.responseText);
}
});
$.ajax({
类型:“POST”,
cache:false,
url:“@url.Action(“AddPart”,“Jobs”)”,//$(this.attr(“Action”),
数据:$.toJSON(结果),
contentType:'应用程序/json',
成功:功能(数据){
$(“#progressdiv”).html();
var isValid=$(数据).find(“.validation summary errors”).length==0;
如果(有效){
var pwindow=$(“窗口”).data(“tWindow”);
pwindow.close();
$('.page').html(数据);如果我理解正确:
您的主视图有一个模型,该模型有一个PartsList
“添加部件”视图发出ajax请求,向PartsList
添加一个新项目(但不将其存储在数据库中……那么它在做什么呢?)
数据库中没有存储任何内容
我认为这里的问题在于设计。主视图最初是如何获得它的部件列表的?还是它开始时是空的,而部件是使用“添加部件”添加的
老实说,我有两种选择:
重新设计应用程序,以便主视图从数据库中读取其部分列表
,并“添加部分”向数据库中添加项目。这样,在ajax调用后,您可以刷新主视图
保持状态客户端:这可能是一个隐藏的输入,您可以将部件列表存储为逗号分隔的字符串,并使用一些javascript来保持添加部件和主视图的同步。混乱但可行
我非常倾向于#1。我最后做的是将我的模型存储在会话对象中,并在重新呈现页面时检索并使用它。1.正确2.正确(大部分)3.不正确的数据最初存储在数据库中-该点的零件列表可能为空或其中包含项目。当我想向该列表添加新零件时,我调用我的第二个视图来提供有关该零件的输入(说明、成本、类型均为3个字段)。我的主视图显示这些零件的当前列表。在用户在“添加”视图,我希望我的主视图在其列表中显示此新部件。我无法从“添加”视图将部件直接存储在数据库中,因为需要基于主视图进行其他处理。HTH