C# 如何在同一模型的视图中使用局部视图?
我有一个具有以下功能的简单表单C# 如何在同一模型的视图中使用局部视图?,c#,asp.net-mvc,entity-framework,asp.net-mvc-4,partial-views,C#,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,Partial Views,我有一个具有以下功能的简单表单 第一部分:它有一个表,可以显示数据库表中的值,例如tblProfile,它包含三列,如profileid、profilename、description,每行有一个编辑按钮来编辑值 第二部分:在同一页中,我有三个文本框来输入同一数据库表的值,例如tblProfile。单击submit按钮后,它会将值插入表中,并立即在上面提到的表中显示该值,并基于最后一个profileid在profileid文本框中显示顶部+1 id。如果在表格上单击任何编辑按钮,这三个文本框将填
tblProfile
,它包含三列,如profileid、profilename、description
,每行有一个编辑按钮来编辑值tblProfile
。单击submit按钮后,它会将值插入表中,并立即在上面提到的表中显示该值,并基于最后一个profileid
在profileid
文本框中显示顶部+1 id。如果在表格上单击任何编辑按钮,这三个文本框将填充值。修改后,必须对其进行更新IEnumerable
作为模型,以便所有概要文件值都显示在表中(强类型视图)。现在,对于表单部分,我创建了一个局部视图,它也是一个强类型视图,但它使用MyModel
作为其模型类型,而不是IEnumerable
我不知道我应该把保存、更新、取消等按钮放在哪里:在主视图中还是在局部视图中。如何完成功能?我在主解决方案中使用VS2010 SP1、MVC4和EF,它有一个MVC项目,一个两个文件夹:BusinessLayer和DataAccesLayer。BusinessLayer文件夹包含BO和BA的独立类库,DataAccesLayer文件夹包含一个类库文件,以及两个其他文件夹,一个用于EF.edmx文件,另一个用于DA类
我如何实现这一点
简单方法:创建一个用于添加新记录的局部视图,以及另一个用于更新现有记录的局部视图。采用这种方法的原因是为了将您的post操作应如何处理您的请求的关注点分开。除非添加bool标志来告诉操作post命令是插入还是更新,否则它将不知道如何处理数据。因此,我建议创建单独的partials
// Insert partial "InsertPartialView"
@YourApp.Models.MyModel
@using (Html.BeginForm("InsertNewRecord", "Home"))
{
// your field controls here
<input type="submit" value="Add" />
}
如果您以前从未使用过ajax链接,我将对此进行解释。前三个参数是链接的文本、操作的名称和项的id——与常规Html actionlink没有什么不同。第四个参数允许我们定义ajax选项。“GET”方法是自解释的——我们不处理这个调用中的任何数据,只从数据库中检索数据。InsertionMode选项定义了返回数据在视图中的处理方式。在这种情况下,我们希望它替换当前的“插入”局部视图,因此我们选择“替换”。最后,我们定义了要插入局部视图的元素,即名为“partialDiv”的元素
此时,唯一缺少的是ajax调用的操作
[HttpGet]
public PartialViewResult GetUpdatePartial(int id)
{
var record = db.tblProfile.Single(r => r.profileid == id);
return PartialView("UpdatePartialView", record);
}
此操作使用来自“编辑”ajax链接的profileid从db检索其记录,然后我们将返回部分视图,其中记录作为其模型。结果应该是这个局部视图现在将被插入到我们的“partialDiv”中,取代最初的“insert”局部视图
如果需要,以下是其他操作:
[HttpPost]
public ActionResult InsertNewRecord(MyModel model)
{
if (model.IsValid)
{
db.tblProfile.Add(model);
db.SaveChanges();
}
return RedirectToAction("Index");
}
希望这有帮助请只显示(简化的)模型和视图,而不是讲述它们。我建议将所有这些按钮保留在文本框所在的第二部分视图中,因为您将这些控件包装在表单中,然后单击任何按钮提交表单!!好的35; Gurupasad Rao我正在尝试使用您的方法…hello@CodeCaster请查看图像通常带有部分,如果您希望该表单能够自行提交,请在其中包含一个按钮。如果需要,创建单独的视图,一个用于提交,一个用于查看。否则它会变得非常混乱!嗨@Eckert这对我来说是极好的和解释性的…我是全新的,通过浏览youtube上的一些视频学习了MVC…这里我使用的是VS 2010 SP1和MVC 4…我遵循的是三层架构,我找不到并插入了Submit()或SaveChanges()。。。你能把你为这次精彩的演示准备的解决方案寄给我吗??通过经历我可以理解…谢谢!!我从来没有提到InsertionSubmit()方法(我甚至不认为这是一件事),SaveChanges()是将更改提交到数据库的标准方法。听起来你需要看一个简单的MVC4教程,它使用EF来获得MVC的基础知识。请看直接来自官方MVC网站的本教程:
@Ajax.ActionLink("Edit", "GetUpdatePartial", new { id = item.profileid }, new AjaxOptions { HttpMethod = "GET", InsertionMode = InsertionMode.Replace, UpdateTargetId = "partialDiv" })
[HttpGet]
public PartialViewResult GetUpdatePartial(int id)
{
var record = db.tblProfile.Single(r => r.profileid == id);
return PartialView("UpdatePartialView", record);
}
[HttpPost]
public ActionResult InsertNewRecord(MyModel model)
{
if (model.IsValid)
{
db.tblProfile.Add(model);
db.SaveChanges();
}
return RedirectToAction("Index");
}
public ActionResult UpdateRecord(MyModel model)
{
if (model.IsValid)
{
db.Entry(model).State = EntityState.modified;
db.SaveChanges();
}
return RedirectToAction("Index");
}