Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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# 使用Razor视图在Asp.net Mvc中动态添加和编辑数据_C#_Asp.net Mvc_Razor_Dapper - Fatal编程技术网

C# 使用Razor视图在Asp.net Mvc中动态添加和编辑数据

C# 使用Razor视图在Asp.net Mvc中动态添加和编辑数据,c#,asp.net-mvc,razor,dapper,C#,Asp.net Mvc,Razor,Dapper,我是MVC新手。使用脚手架机制,我成功地在数据库表上创建了CRUD操作。这在一次处理单个MVC模型(映射到单个模型)时效果很好。我想实现向数据库中添加和编辑列表(最初将是空列表),用户应该能够根据需要添加任意数量的项目,然后将数据提交到数据库。我希望这个列表具有动态长度,这样当用户编辑数据时,他应该能够向模型中添加更多的新元素,同时删除几个单独的模型。我找不到合适的资源来提出解决方案。很少的帮助会很感激 场景-一个人可以有多个地址,或者他将没有任何地址。如何通过向视图中添加地址来添加多个地址,以

我是MVC新手。使用脚手架机制,我成功地在数据库表上创建了CRUD操作。这在一次处理单个MVC模型(映射到单个模型)时效果很好。我想实现向数据库中添加和编辑列表(最初将是空列表),用户应该能够根据需要添加任意数量的项目,然后将数据提交到数据库。我希望这个列表具有动态长度,这样当用户编辑数据时,他应该能够向模型中添加更多的新元素,同时删除几个单独的模型。我找不到合适的资源来提出解决方案。很少的帮助会很感激

场景-一个人可以有多个地址,或者他将没有任何地址。如何通过向视图中添加地址来添加多个地址,以及如何对这些地址执行编辑?如果其中一个地址需要删除,那么如何删除

多谢各位

以下是我的观点:

@model MVC.Models.PersonDetailsViewModel
@{

    ViewBag.Title = "AddorEdit";
}

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

    <div class="container">

        <div id="personDetails" class="row">
            @Html.HiddenFor(model => model.personModel.PersonId, new { @id = "personId" })

            <div class="form-group">
                <div class="col-md-2">
                    <label>First Name</label>
                    <div style="display:inline">
                        @Html.EditorFor(model => model.personModel.FirstName, new { htmlAttributes = new { @class = "form-control" } })
                        @Html.ValidationMessageFor(model => model.personModel.FirstName, "", new { @class = "text-danger" })
                    </div>
                </div>

                <div class="col-md-2">
                    <label>Last Name</label>
                    <div style="display:inline;">
                        @Html.EditorFor(model => model.personModel.LastName, new { htmlAttributes = new { @class = "form-control" } })
                        @Html.ValidationMessageFor(model => model.personModel.LastName, "", new { @class = "text-danger" })
                    </div>
                </div>

                <div class="col-md-2">
                    <label>Date of Birth</label>
                    <div style="display:inline">
                        @Html.EditorFor(model => model.personModel.DateOfBirth, new { @id = "dob", htmlAttributes = new { @class = "form-control date-picker" } })
                        @Html.ValidationMessageFor(model => model.personModel.DateOfBirth, "", new { @class = "text-danger" })

                    </div>
                </div>

                <div class="col-md-1">
                    <label>Height</label>
                    <div style="display:inline">
                        @Html.EditorFor(model => model.personModel.Height, new { htmlAttributes = new { @class = "form-control" } })
                        @Html.ValidationMessageFor(model => model.personModel.Height, "", new { @class = "text-danger" })
                    </div>
                </div>

                <div class="col-md-1">
                    <label>Weight</label>
                    <div style="display:inline">
                        @Html.EditorFor(model => model.personModel.Weight, new { htmlAttributes = new { @class = "form-control" } })
                        @Html.ValidationMessageFor(model => model.personModel.Weight, "", new { @class = "text-danger" })
                    </div>
                </div>

                <div class="col-md-2">
                    <label>Location</label>
                    <div style="display:inline">
                        @Html.EditorFor(model => model.personModel.Location, new { htmlAttributes = new { @class = "form-control" } })
                        @Html.ValidationMessageFor(model => model.personModel.Location, "", new { @class = "text-danger" })
                    </div>
                </div>

            </div>
        </div>
        <br />
        <div id="tabs" class="panel panel-default">
            <div class="panel-heading">
                <ul class="nav nav-tabs">
                    <li class="active"><a href="#tabs-1" data-toggle="tab">Address</a></li>
                    <li><a href="#tabs-2" data-toggle="tab">Insuarance</a></li>
                    <li><a href="#tabs-3" data-toggle="tab">Emergency Contacts</a></li>
                </ul><br />
            </div>
            <div class="tab-content panel-body">
                <div id="tabs-1" class="tab-pane fade in active">
                    <div style="height:22px">
                        <a class="btn btn-default" id="btnAdd" style="float:right"><span class="glyphicon glyphicon-plus-sign"></span> Add New Row</a>
                    </div>
                    <br />
                    <div id="mainContent">
                        <div id="addressDiv">
                            <div class="col-md-11">
                                @*@Html.Partial("_Address", Model.addressModel);*@
                                @{
                                    Html.RenderAction("AddressPartialView", "Person");
                                }
                            </div>
                            <a id="closeAddress" style="margin-top:33px" class="col-md-1 closeLink"><i class="glyphicon glyphicon-trash" style="color:red"></i></a>
                        </div>

                    </div>
                </div>

                <div id="tabs-2" class="tab-pane fade">
                    @Html.HiddenFor(model => model.insuranceModel.InsuranceId, new { @id = "insuranceId" })
                    <div class="col-md-4">
                        <label>Health Plan</label>
                        <div style="display:inline">
                            @Html.TextBoxFor(model => model.insuranceModel.HealthPlan, null, new { @class = "form-control" })
                            @Html.ValidationMessageFor(model => model.insuranceModel.HealthPlan, "", new { @class = "text-danger" })
                        </div>
                    </div>

                    <div class="col-md-4">
                        <label>Health Plan Type</label>
                        <div style="display:inline">
                            @Html.TextBoxFor(model => model.insuranceModel.HealthPlanType, null, new { @class = "form-control" })
                            @Html.ValidationMessageFor(model => model.insuranceModel.HealthPlanType, "", new { @class = "text-danger" })
                        </div>
                    </div>

                    <div class="col-md-4">
                        <label>Card Number</label>
                        <div style="display:inline">
                            @Html.TextBoxFor(model => model.insuranceModel.CardNumber, null, new { @class = "form-control" })
                            @Html.ValidationMessageFor(model => model.insuranceModel.CardNumber, "", new { @class = "text-danger" })
                        </div>
                    </div>
                </div>

                <div id="tabs-3" class="tab-pane fade">
                    @Html.HiddenFor(model => model.emergencyContactModel.EmergencyContactId, new { @id = "emergencyContactId" })
                    <div class="col-md-3">
                        <label>Contact Patient</label>
                        <div style="display:inline">
                            @{
                                List<SelectListItem> personItems = new List<SelectListItem>();
                                personItems.Add(new SelectListItem { Text = "--Select One--", Value = "", Selected = true });
                                personItems.Add(new SelectListItem { Text = "1", Value = "1" });
                                personItems.Add(new SelectListItem { Text = "2", Value = "2" });
                                personItems.Add(new SelectListItem { Text = "3", Value = "3" });
                                personItems.Add(new SelectListItem { Text = "4", Value = "4" });
                            }
                            @Html.DropDownListFor(model => model.emergencyContactModel.ContactPersonId, personItems, new { @class = "form-control" })
                            @Html.ValidationMessageFor(model => model.emergencyContactModel.ContactPersonId, "", new { @class = "text-danger" })
                        </div>
                    </div>

                    <div class="col-md-3">
                        <label>Relationship Type</label>
                        <div style="display:inline">
                            @{
                                List<SelectListItem> relationshipItems = new List<SelectListItem>();
                                relationshipItems.Add(new SelectListItem { Text = "--Select One--", Value = "", Selected = true });
                                relationshipItems.Add(new SelectListItem { Text = "Father", Value = "Father" });
                                relationshipItems.Add(new SelectListItem { Text = "Mother", Value = "Mother" });
                                relationshipItems.Add(new SelectListItem { Text = "Son", Value = "Son" });
                                relationshipItems.Add(new SelectListItem { Text = "Daughter", Value = "Daughter" });
                                relationshipItems.Add(new SelectListItem { Text = "Guardian", Value = "Guardian" });
                            }
                            @Html.DropDownListFor(model => model.emergencyContactModel.RelationshipType, relationshipItems, new { @class = "form-control" })
                            @Html.ValidationMessageFor(model => model.emergencyContactModel.RelationshipType, "", new { @class = "text-danger" })
                        </div>
                    </div>

                    <div class="col-md-3">
                        <label>Contact Number</label>
                        <div style="display:inline">
                            @Html.TextBoxFor(model => model.emergencyContactModel.ContactNumber, null, new { @class = "form-control" })
                            @Html.ValidationMessageFor(model => model.emergencyContactModel.ContactNumber, "", new { @class = "text-danger" })
                        </div>
                    </div>

                    <div class="col-md-3">
                        <label>Email Id</label>
                        <div style="display:inline">
                            @Html.TextBoxFor(model => model.emergencyContactModel.EmailId, null, new { @class = "form-control" })
                            @Html.ValidationMessageFor(model => model.emergencyContactModel.EmailId, "", new { @class = "text-danger" })
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <br />

        <div class="col-md-12">
            <input type="submit" value="Save" class="btn btn-default" style="margin-top:10px" />
        </div>

    </div>


}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>
public ActionResult AddressPartialView()
        {
            var _model = new PersonDetailsViewModel();
            return PartialView("_Address", _model.addressModel);
        }

//To load the data into the form - for editing
public ActionResult AddorEdit(int id = 0)
        {
            if (id == 0)
            {
                var myModel = new PersonDetailsViewModel();
                return View(myModel);
            }
            else
            {
                HttpResponseMessage responsePerson = GlobalVariables.WebApiClient.GetAsync("Person/" + id.ToString()).Result;
                HttpResponseMessage responseAddress = GlobalVariables.WebApiClient.GetAsync("Address/" + id.ToString()).Result;
                HttpResponseMessage responseInsurance = GlobalVariables.WebApiClient.GetAsync("Insurance/" + id.ToString()).Result;
                HttpResponseMessage responseEmergencyContact = GlobalVariables.WebApiClient.GetAsync("EmergencyContact/" + id.ToString()).Result;
                var personJsonString = responsePerson.Content.ReadAsStringAsync();
                var deserializedPerson = JsonConvert.DeserializeObject<IEnumerable<MvcPersonModel>>(personJsonString.Result);
                var addressJsonString = responseAddress.Content.ReadAsStringAsync();
                var deserializedAddress = JsonConvert.DeserializeObject<IEnumerable<MvcAddressModel>>(addressJsonString.Result);
                var insuranceJsonString = responseInsurance.Content.ReadAsStringAsync();
                var deserializedInsurance = JsonConvert.DeserializeObject<IEnumerable<MvcInsuranceModel>>(insuranceJsonString.Result);
                var emergencyContactJsonString = responseEmergencyContact.Content.ReadAsStringAsync();
                var deserializedEmergencyContact = JsonConvert.DeserializeObject<IEnumerable<MvcEmergencyContactModel>>(emergencyContactJsonString.Result);

                var _ViewModel = new PersonDetailsViewModel();
                _ViewModel.personModel = deserializedPerson.FirstOrDefault();
                _ViewModel.addressModel = deserializedAddress.FirstOrDefault();
                _ViewModel.insuranceModel = deserializedInsurance.FirstOrDefault();
                _ViewModel.emergencyContactModel = deserializedEmergencyContact.FirstOrDefault();

                return View(_ViewModel);
            }
        }


//Posting data to the database
[HttpPost]
public ActionResult AddorEdit(PersonDetailsViewModel viewModel)
{
    HttpResponseMessage responsePerson = GlobalVariables.WebApiClient.PostAsJsonAsync("Person", viewModel.personModel).Result;
    HttpResponseMessage responseAddress = GlobalVariables.WebApiClient.PostAsJsonAsync("Address", viewModel.addressModel).Result;
    HttpResponseMessage responseInsurance = GlobalVariables.WebApiClient.PostAsJsonAsync("Insurance", viewModel.insuranceModel).Result;
    HttpResponseMessage responseEmergencyContact = GlobalVariables.WebApiClient.PostAsJsonAsync("EmergencyContact", viewModel.emergencyContactModel).Result;

    return RedirectToAction("Index");
}
@model MVC.Models.PersonDetailsViewModel
@{
ViewBag.Title=“AddorEdit”;
}
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model=>model.personModel.PersonId,新的{@id=“PersonId”})
名字
@EditorFor(model=>model.personModel.FirstName,new{htmlAttributes=new{@class=“form control”})
@Html.ValidationMessageFor(model=>model.personModel.FirstName,“,新的{@class=“text danger”})
姓
@EditorFor(model=>model.personModel.LastName,new{htmlAttributes=new{@class=“form control”})
@Html.ValidationMessageFor(model=>model.personModel.LastName,“,新的{@class=“text danger”})
出生日期
@EditorFor(model=>model.personModel.DateOfBirth,new{@id=“dob”,htmlAttributes=new{@class=“表单控制日期选择器”})
@Html.ValidationMessageFor(model=>model.personModel.DateOfBirth,“,new{@class=“text danger”})
高度
@EditorFor(model=>model.personModel.Height,new{htmlAttributes=new{@class=“form control”})
@Html.ValidationMessageFor(model=>model.personModel.Height,“,新的{@class=“text danger”})
重量
@EditorFor(model=>model.personModel.Weight,new{htmlAttributes=new{@class=“form control”})
@Html.ValidationMessageFor(model=>model.personModel.Weight,“,新的{@class=“text danger”})
位置
@EditorFor(model=>model.personModel.Location,new{htmlAttributes=new{@class=“form control”})
@Html.ValidationMessageFor(model=>model.personModel.Location,“,新的{@class=“text danger”})


添加新行
@*@Html.Partial(“_Address”,Model.addressModel)*@ @{ Html.RenderAction(“AddressPartialView”、“Person”); } @Html.HiddenFor(model=>model.insuranceModel.InsuranceId,新的{@id=“InsuranceId”}) 健康计划 @TextBoxFor(model=>model.insuranceModel.HealthPlan,null,新的{@class=“form control”}) @Html.ValidationMessageFor(model=>model.insuranceModel.HealthPlan,“,新的{@class=“text danger”}) 健康计划类型 @TextBoxFor(model=>model.insuranceModel.HealthPlanType,null,新的{@class=“formcontrol”}) @Html.ValidationMessageFor(model=>model.insuranceModel.HealthPlanType,“,新的{@class=“text danger”}) 卡号 @TextBoxFor(model=>model.insuranceModel.CardNumber,null,新的{@class=“form control”}) @Html.ValidationMessageFor(model=>model.insuranceModel.CardNumber,“,新的{@class=“text danger”}) @Html.HiddenFor(model=>model.emergencyContactModel.EmergencyContactId,新的{@id=“EmergencyContactId”}) 接触病人 @{ List personItems=新列表();