MVC 5 Razor 中的引导模式:当用户单击模式中的继续按钮时,如何将模型布尔值更新为 false

Bootstrap Modal in MVC 5 Razor: How do I update model boolean value to false when user clicks continue button in modal?

本文关键字:模式 模型 布尔值 false 更新 单击 Razor 继续 MVC 用户 按钮      更新时间:2023-09-26

我想尝试用Ajax post请求来实现这一点,但我从未使用过Ajax,我不确定如何做到这一点。


我的密码面板视图代码如下所示:

<div class="panel panel-default">
        <div class="panel-heading">
            <h3 class="panel-title">Reset Password</h3>
        </div>
        <div class="panel-body" id="myForm">
            @using (Html.BeginForm("EditPassword", "Users", new { UserId = Model.User.Id, Token = Model.Token }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
            {
                @Html.AntiForgeryToken()
                @Html.ValidationSummary()
                <div class="form-group">
                    @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label"})
                    <div class="col-md-10">
                        @Html.PasswordFor(m => m.Password, new { @class = "form-control", @type = "text" })
                    </div>
                </div>
            <div id="dialog-modal" style="display:none;" title="Basic modal dialog"></div>
                <div class="col-md-9">
                    <button type="submit" data-toggle="modal"  data-target=".bootstrapmodal"  class="btn btn-primary" value="Reset" onclick="javascript: return checkPassForm(document.getElementById('myForm'));">Reset</button>
                </div>
            }
        </div>

引导模态代码:

    <div class="modal fade bootstrapmodal" id="modalMain" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="false" data-keyboard="static">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button data-dissmiss="modal" class="close modal-close-btn" data-dismiss="modal" aria-hidden="true"> <span>&times;</span> </button>
                <div class="modal-title"><h3>News Letter Account</h3></div>
            </div>
            <div class="modal-body">
                <p>This is a newsletter only account which does not have an existing password.</p>
                <p>Do you wish to create a mySewnet account for this user?</p>
            </div>
            <div class="modal-footer">
                <button class="btn btn-primary" id="btn-updateNL"> Continue </button>
                <button class="btn btn-default cancel-modal" data-dismiss="modal" aria-hidden="true"> Cancel</button>
            </div>
        </div>
    </div>
</div>

同一视图中的脚本代码如下所示

@Scripts.Render("~/bundles/jquery")
<script type="text/javascript">
$(document).ready(function () {
    $("#btn-updateNL").on('click', function (e) {
           @this.Model.User.NewsletterOnly.Equals(false);
        });
});

View 重置密码面板的控制器代码:

 [AllowAnonymous]
    [HttpGet]
    public ActionResult EditPassword(int userId, string token)
    {
        User user = new User();
        EditUserViewModel top = new EditUserViewModel();
        int rer = top.UserId;
        userId = user.Id;
        token = UserManager.GeneratePasswordResetToken(user.Id);

        var model = new EditUserViewModel()
        {
            UserId = userId,
            Token = token
        };
        return RedirectToAction("Edit", new { userId = userId });
    }
    //POST: /Admin/UserManager/Edit
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> EditPassword(EditUserViewModel model)
    {
        model.Token = UserManager.GeneratePasswordResetToken(model.UserId);

        var user = this.UserManager.FindById(model.UserId); //Gets current user
        var oldTermsAndConditionAgreement = user.TermsAndConditionsAgreement; //Gets current value of TermsAndConditionsAgreement
        user.TermsAndConditionsAgreement = true; //Sets TermsAndConditionsAgreement to true

        //Run a break on this line next time when coding
        var result = this.UserManager.ResetPassword(model.UserId, model.Token, model.Password.Trim()); //If TermsAndConditionsAgreement is not true, this seems to break
        user.TermsAndConditionsAgreement = oldTermsAndConditionAgreement; //TermsAndConditionsAgreement is set back to original value after process runs
        if (result.Succeeded)
        {
            TempData["Message"] = AppResources.Common.FormAdminPasswordresetSuccess;
            //return RedirectToAction("Login", "Account");
            await _db.SaveChangesAsync();
            //return RedirectToAction("Edit");
        }
        foreach (var error in result.Errors)
        {
            ModelState.AddModelError("", error);
        }
        return RedirectToAction("Edit", new { id = model.UserId });
    }

我想让密码面板上的"重置"按钮能够显示模型面板,如果用户将"仅新闻通讯"复选框设置为"true"。我可以通过将这个 Razor if 语句语法放在上面的模态代码周围来做到这一点。

*当Newsletteronly设置为true并且检查帐户不是真正的帐户时,因此管理员无法重置用户的密码,因为数据库中没有为选择接收新闻信的用户创建密码。其他数据(如电子邮件,姓名,街道地址)被收集并存储在数据库中。电子邮件是此网络应用程序中的用户名。

@if(这个。Model.User.NewsletterOnly == true){}

这样做仅允许在单击重置按钮以及用户帐户满足条件时显示模式。我现在遇到的问题是试图得到在页面加载和模式消失后,在模式对话框中单击"继续"按钮时,将"仅新闻通讯"值更新为 false 的模型。我相信Ajax帖子可以解决这个问题,但不知道如何在MVC 5 Razor .Net上使用bootsrap模式实现这一点。

图像:

("页面视图")描述:视图左侧是"用户面板",它显示"仅新闻通讯"复选框,如果用户拥有仅新闻信件帐户,则将其选中为True)右侧显示重置密码面板和其他面板

模 态

    $("#btn-updateNL").on('click', function (e) {
           $.post("yourActionMethodToUpdateNewsLetterValue",{userId:1,NL:false},function(){
                  alert('updated succesully');
           });
      });

{userId:1,NL:false}这里你需要传递当前用户 Id,然后将 NewsLetterOnly 变量的值传递为假。您可以使用接受这两个参数的控制器方法,然后编写逻辑来更新 Db。

控制器操作方法类似于

 public async UpdateUserNewsLetterFlag(int userId,bool NL)