Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从C#MVC 5中的控制器访问当前模型?_C#_Asp.net_Asp.net Mvc_Model_Controller - Fatal编程技术网

如何从C#MVC 5中的控制器访问当前模型?

如何从C#MVC 5中的控制器访问当前模型?,c#,asp.net,asp.net-mvc,model,controller,C#,Asp.net,Asp.net Mvc,Model,Controller,我是C#MVC的新手,我有一个大的表单要构建。该表单用于创建/编辑我的主模型(AcModel)的实例,它跨越多个选项卡(所有选项卡都位于同一视图中)。它包含几个Telerik网格,这些网格使用不同的模型填充(每个模型表示数据库中的一个表) 因此,当用户点击按钮进入下一个选项卡时,我想触发对他刚刚输入的表单的验证。在其中一个网格中,用户可以添加、更新或删除另一个模型的数据。因此,当他点击按钮提交网格中的一行时,我的控制器的一个动作被调用,该模型作为参数。但是我现在不想调用服务来更新数据库,因为我首

我是C#MVC的新手,我有一个大的表单要构建。该表单用于创建/编辑我的主模型(AcModel)的实例,它跨越多个选项卡(所有选项卡都位于同一视图中)。它包含几个Telerik网格,这些网格使用不同的模型填充(每个模型表示数据库中的一个表)

因此,当用户点击按钮进入下一个选项卡时,我想触发对他刚刚输入的表单的验证。在其中一个网格中,用户可以添加、更新或删除另一个模型的数据。因此,当他点击按钮提交网格中的一行时,我的控制器的一个动作被调用,该模型作为参数。但是我现在不想调用服务来更新数据库,因为我首先需要表单创建的主对象的id

对于那些选定值无法直接绑定到主模型字段的网格,如果用户转到下一个选项卡时模型通过验证,我希望更新模型,并且只有当用户到达表单末尾并提交表单时,我才希望调用服务并更新表单中每个字段的db

这就是:如何从主模型的控制器访问主模型?我可以从视图中将其序列化为Json,并通过ViewBag将其传递给控制器,然后从我的操作返回它,但返回的视图不包含用户的输入,这是肮脏的,必须有一种更简单/更干净的方法

这是视图中的我的网格(Views/Ac/ACForm.cshtml):

@(Html.Kendo().Grid())
.名称(“电网ac ppr”)
.DataSource(ds=>ds
.Ajax()
.Model(m=>m.Id(p=>p.LacID))
.页面大小(10)
.Events(e=>e.Error(“错误处理程序”))
.Create(update=>update.Action(“AcPpr\u Create”,“Ac”))
.Read(Read=>Read.Action(“AcPpr_Read”,“Ac”,new{IdAC=Model.AcID}))
.Update(Update=>Update.Action(“AcPpr\u Update”,“Ac”))
.Destroy(update=>update.Action(“AcPpr\u Destroy”、“Ac”))
.列(c=>
{
c、 ForeignKey(p=>p.PprID,(List)ViewBag.PPRs,“Ppr_Id”,“Ppr_Libelle”);
c、 结合(p=>p.QteMin);
c、 束缚(p=>p.CAMin);
c、 Command(Command=>{Command.Edit();Command.Destroy();});
})
.ToolBar(t=>t.Create())
.可过滤()
.Editable(Editable=>Editable.Mode(GridEditMode.InLine)))
以下是用于填充我的网格的模型:

public class ListeAcPprModel
{
    public int LacID { get; set; }
    public Nullable<int> PprID { get; set; }
    public Nullable<int> AcoID { get; set; }
    public Nullable<int> QteMin { get; set; }
    public Nullable<decimal> CAMin { get; set; }
    public Nullable<bool> IsExclusion { get; set; }
    public Nullable<int> TypePerimetre { get; set; }
}
公共类listacprmodel
{
public int LacID{get;set;}
公共可为空的PprID{get;set;}
公共可空AcoID{get;set;}
公共可空QteMin{get;set;}
公共可空CAMin{get;set;}
公共可为空的IsExclusion{get;set;}
公共可空类型周长{get;set;}
}
和(部分)我的主模型(AcModel):

公共类AcModel
{
(...)
公共虚拟ICollection AC_PPR_模型{get;set;}
}
以下是我的控制器(Controllers/acontroller.cs)中的典型操作:

[HttpPost]
公共异步任务AcPpr_更新([DataSourceRequest]DataSourceRequest请求,ListACPPR模型AcPpr)
{
if(AcPpr!=null&&ModelState.IsValid)
{
//在这里,我想用我从视图中获得的AcPpr更新AcModel的属性AC_PPR_MODELs中的一项,这是一个ICollection
}
返回Json(new[]{AcPpr}.ToDataSourceResult(Request,ModelState));
}
非常感谢你的帮助

public class ListeAcPprModel
{
    public int LacID { get; set; }
    public Nullable<int> PprID { get; set; }
    public Nullable<int> AcoID { get; set; }
    public Nullable<int> QteMin { get; set; }
    public Nullable<decimal> CAMin { get; set; }
    public Nullable<bool> IsExclusion { get; set; }
    public Nullable<int> TypePerimetre { get; set; }
}
public class AcModel
{
    (...)
    public virtual ICollection<ListeAcPprModel> AC_PPR_MODELs { get; set; }
}
[HttpPost]
public async Task<ActionResult> AcPpr_Update([DataSourceRequest] DataSourceRequest Request, ListeAcPprModel AcPpr)
{
    if (AcPpr != null && ModelState.IsValid)
    {
        // Here I want to update one of the items in the property AC_PPR_MODELs of AcModel, which is an ICollection, with the AcPpr that I got from the view
    }
    return Json(new[] { AcPpr }.ToDataSourceResult(Request, ModelState));
}