在仍然使用Model的情况下发布两种数据.在ASP中有效.NET Core 1.0

Post two kinds of data while still using Model.IsValid in ASP.NET Core 1.0

本文关键字:ASP 数据 有效 Core NET 两种 Model 布两种 情况下      更新时间:2023-09-26

使用实体框架核心的数据库模型,我有"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,它会自动为你正确格式化。