如何从C#MVC 5中的控制器访问当前模型?
我是C#MVC的新手,我有一个大的表单要构建。该表单用于创建/编辑我的主模型(AcModel)的实例,它跨越多个选项卡(所有选项卡都位于同一视图中)。它包含几个Telerik网格,这些网格使用不同的模型填充(每个模型表示数据库中的一个表) 因此,当用户点击按钮进入下一个选项卡时,我想触发对他刚刚输入的表单的验证。在其中一个网格中,用户可以添加、更新或删除另一个模型的数据。因此,当他点击按钮提交网格中的一行时,我的控制器的一个动作被调用,该模型作为参数。但是我现在不想调用服务来更新数据库,因为我首先需要表单创建的主对象的id 对于那些选定值无法直接绑定到主模型字段的网格,如果用户转到下一个选项卡时模型通过验证,我希望更新模型,并且只有当用户到达表单末尾并提交表单时,我才希望调用服务并更新表单中每个字段的db 这就是:如何从主模型的控制器访问主模型?我可以从视图中将其序列化为Json,并通过ViewBag将其传递给控制器,然后从我的操作返回它,但返回的视图不包含用户的输入,这是肮脏的,必须有一种更简单/更干净的方法 这是视图中的我的网格(Views/Ac/ACForm.cshtml):如何从C#MVC 5中的控制器访问当前模型?,c#,asp.net,asp.net-mvc,model,controller,C#,Asp.net,Asp.net Mvc,Model,Controller,我是C#MVC的新手,我有一个大的表单要构建。该表单用于创建/编辑我的主模型(AcModel)的实例,它跨越多个选项卡(所有选项卡都位于同一视图中)。它包含几个Telerik网格,这些网格使用不同的模型填充(每个模型表示数据库中的一个表) 因此,当用户点击按钮进入下一个选项卡时,我想触发对他刚刚输入的表单的验证。在其中一个网格中,用户可以添加、更新或删除另一个模型的数据。因此,当他点击按钮提交网格中的一行时,我的控制器的一个动作被调用,该模型作为参数。但是我现在不想调用服务来更新数据库,因为我首
@(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));
}