在仍然使用Model的情况下发布两种数据.在ASP中有效.NET Core 1.0
本文关键字:ASP 数据 有效 Core NET 两种 Model 布两种 情况下 | 更新日期: 2023-09-27 18:06:21
使用实体框架核心的数据库模型,我有"Users", "UserRoles"answers"Roles",以便在user和role之间创建多对多的关系,如下图所示。
问题是我不想在与"Roles"信息分开的页面上编辑"Users"类中的信息。
页面应该如下所示:理想的页面
我的jquery函数尝试将复选框解析为数据库中每个角色的字典。
function submitForm() {
$('#myForm').submit().bind('ajax:complete', function () {
$.post(
"/Admin/EditUserRoles",
{
SuperAdmin: $('#IsSuperAdmin').is(':checked'),
Administrator: $('#IsAdmin').is(':checked'),
Manager: $('#IsManager').is(':checked'),
Physician: $('#IsPhysician').is(':checked')
});
});
};
@model Users
<h1 class="col-xs-offset-4">@ViewData["Title"]</h1>
<form id="myForm" asp-controller="Admin" asp-action="@ViewData["asp-action"]" method="post" class="form form-horizontal col-xs-offset-4">
<div class="alert form-group" asp-validation-summary="All"></div>
<div class="form-group">
<label asp-for="Firstname">First Name: </label>
<input asp-for="Firstname" class="form-control" type="text" />
</div>
<div class="form-group">
<label asp-for="Lastname">Last Name: </label>
<input asp-for="Lastname" class="form-control" type="text" />
</div>
<div class="form-group">
<label asp-for="Email">Email: </label>
<input asp-for="Email" class="form-control" type="email" />
</div>
@if (ViewData["IsAD"].Equals(true))
{
<div class="form-group">
<label asp-for="Username">Username (Must match username in Microsoft Active Directory): </label>
<input asp-for="Username" data-val="false" data-val-required="The Username field is required" class="form-control" type="text" />
</div>
}
</form>
<div class="col-xs-offset-4">
<h3>Roles</h3>
<div class="checkbox">
<label for="IsSuperAdmin">
<input id="IsSuperAdmin" name="IsSuperAdmin" type="checkbox" checked='@ViewData["IsSuperAdmin"]' @if (ViewData["IsMe"].Equals(true)) { @Html.Raw("disabled") ; } /> Super Admin
</label>
</div>
<div class="checkbox">
<label for="IsAdmin" class="checkbox">
<input id="IsAdmin" name="IsAdmin" type="checkbox" checked='@ViewData["IsAdmin"]' @if (ViewData["IsMe"].Equals(true)) { @Html.Raw("disabled") ; } /> Administrator
</label>
</div>
<div class="checkbox">
<label for="IsManager" class="checkbox">
<input id="IsManager" name="IsManager" type="checkbox" checked='@ViewData["IsManager"]' /> Manager
</label>
</div>
<div class="checkbox">
<label for="IsPhysician" class="checkbox">
<input id="IsPhysician" name="IsPhysician" type="checkbox" checked='@ViewData["IsPhysician"]' /> Physician
</label>
</div>
<br />
<br />
<div class="form-group">
<input type="submit" value="Create" class="btn btn-success" onclick="submitForm()" readonly />
<input onclick="history.go(-1)" type="button" value="Back" class="btn btn-default btn-group-vertical" return false;" readonly />
</div>
</div>
我必须找到一种方法来传递"用户"answers"UserRoles"对象到post动作。有什么好办法吗?
让单个控制器动作接受多个对象,让单个控制器动作接受单个绑定对象,或者让两个动作一个接一个地触发,这些方法就足够了。
你可以创建一个javascript obj包含你的两个模型:
var objUsers = {};
objUsers.FirstName = "";
var objUserRoles = {};
objUserRoles.IsSuperAdmin = "";
var obj = {};
obj.user = objUsers;
obj.userRoles = objUserRoles;
$.ajax({
url: "",
type: "post",
dataType: "json",
data: JSON.stringify(obj),
contentType: "application/json;",
然后在你的控制器中接受你的两个模型:
public ActionResult blah (UserRoles user, UserRoles userRoles)
还有其他方法。如果你的表单设置正确,那么你可以序列化你的表单:
data: $("#formName").serialize()
然后将绑定到包含user和userRoles模型的模型。需要在所有输入上使用name属性并正确格式化。如果你使用razor,它会自动为你正确格式化。