Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.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# 如何在同一模型的视图中使用局部视图?_C#_Asp.net Mvc_Entity Framework_Asp.net Mvc 4_Partial Views - Fatal编程技术网

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");
    }