如何在mvc实体框架5中将视图和局部视图数据保存到数据库

时间:2016-01-11 12:14:01

标签: c# asp.net-mvc entity-framework

这是我的控制器代码。我有一个视图,里面有一个局部视图。在局部视图的最后,我有一个提交按钮。当我单击此按钮时,我想将主视图和局部视图的数据保存到各自的表中。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcApplication2.Models;
using System.Data.Entity.Validation;

namespace MvcApplication2.Controllers
{
    public class HomePageController : Controller
    {
        //
        // GET: /HomePage/
        MVCDemoEntities db = new MVCDemoEntities();
        public ActionResult Submit()
        {
            List<DocTypeMaster> alldoclist = new List<DocTypeMaster>();
            using (MVCDemoEntities db = new MVCDemoEntities())
            {
                alldoclist = db.DocTypeMasters.OrderBy(a => a.DocTypeName).ToList();
            }
            ViewBag.docid = new SelectList(alldoclist, "Id", "DocTypeName");
            return View();

        }


        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Submit(DetailsEntry de)
        {
            List<DocTypeMaster> alldoclist = new List<DocTypeMaster>();
            using (MVCDemoEntities db = new MVCDemoEntities())
            {
                alldoclist = db.DocTypeMasters.OrderBy(a => a.DocTypeName).ToList();
            }

            ViewBag.docid = new SelectList(alldoclist, "Id", "DocTypeName", de.DocumentId);



                       return View(de);
        }



        [HttpGet]
        public PartialViewResult RacersByCountryPartial(string id)
        {
            Passport ps = new Passport();
            Pan pn = new Pan();
            string id1 = id.Trim();
            if (id1 == "Passport")
                return PartialView("~/Views/HomePage/id1.cshtml", ps);
            else
                return PartialView("~/Views/HomePage/pancard.cshtml", pn);


        }   
        [HttpPost]
        public ActionResult RacersByCountryPartial(string id,Passport ps, Pan pn,DetailsEntry dt)
        {

            return View(id);
        }
    }


}

这是我的主视图。

@model MvcApplication2.DetailsEntry

@{
    ViewBag.Title = "Submit";
}

<h2>Submit</h2>

@using (Html.BeginForm("Submit", "HomePage", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>DetailsEntry</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.ClientId)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.ClientId)
            @Html.ValidationMessageFor(model => model.ClientId)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.ClientName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.ClientName)
            @Html.ValidationMessageFor(model => model.ClientName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.EmployeeId)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.EmployeeId)
            @Html.ValidationMessageFor(model => model.EmployeeId)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.EmpCitizenId)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.EmpCitizenId)
            @Html.ValidationMessageFor(model => model.EmpCitizenId)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.EmpName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.EmpName)
            @Html.ValidationMessageFor(model => model.EmpName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Nationality)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Nationality)
            @Html.ValidationMessageFor(model => model.Nationality)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.DocumentId)
        </div>
        <div class="editor-field">

           @Html.DropDownListFor(Model => Model.DocumentId, @ViewBag.docid as SelectList,"Select document Type")
            @Html.ValidationMessageFor(Model=>Model.DocumentId)
            </div>


    </fieldset>
}
<div id="container"> </div>
<script src="http://code.jquery.com/jquery-1.9.1.js" type="text/javascript"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.2.js"></script>
<script src="//code.jquery.com/jquery-1.11.2.min.js" type="text/javascript"></script>
<script type="text/javascript" src="scripts/jquery-1.8.2.js"></script>
<script src="~/Scripts/jquery-1.7.1.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $("#DocumentId").change(function () {
            $("#log").ajaxError(function (event, jqxhr, settings, exception) {
                alert(exception);
            });

            var countrySelected = $("select option:selected").first().text();

            $.get('@Url.Action("RacersByCountryPartial")',
                              { id: countrySelected }, function (data) {

                    $("#container").html(data);
                });
        });
    });
</script>

这是我的部分观点。

@model MvcApplication2.Passport

<script src="~/Scripts/jquery-1.8.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>Passport</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.pissueddate)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.pissueddate)
            @Html.ValidationMessageFor(model => model.pissueddate)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.pissuedlocation)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.pissuedlocation)
            @Html.ValidationMessageFor(model => model.pissuedlocation)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.pimage)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.pimage)
            @Html.ValidationMessageFor(model => model.pimage)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

在局部视图的末尾有一个提交按钮。我想在单击按钮单击各个表时保存主视图和部分视图数据。请告诉我。

1 个答案:

答案 0 :(得分:0)

所以,如果我理解你正在努力实现的目标......

  1. 从局部视图中删除提交按钮并将其移至主视图
  2. 从局部视图中删除表单并让主表单处理整个用户的输入 - 在您的情况下,您有两个表单,这意味着每个表单应该将自己的数据提交给相应的控制器/操作。嵌套html表单是不可能的 - Can you nest html forms?
  3. 如果您需要执行某些操作(例如显示加载不同数据或其他内容的动态下拉列表) - 请在局部视图中将其作为单独的AJAX调用。但最终提交数据的主要形式应该是唯一的形式。