C# 如何在ASP.NET中将值从视图传递到存储库?

C# 如何在ASP.NET中将值从视图传递到存储库?,c#,asp.net-mvc,C#,Asp.net Mvc,我正在开发一个ASP.NET MVC web门户,它要求用户在首次登录时接受使用条款。在用户单击accept之后,我需要将bool(AcceptedTerms)作为true传回。该值存在于数据库中,并且有一个存储库值(PortalUser.AcceptedTermsAndConditions),将用于从数据库中推送或拉取该值。在控制器中 [ChildActionOnly] public ActionResult RenderLogIn() { PortalUser portalUser

我正在开发一个ASP.NET MVC web门户,它要求用户在首次登录时接受使用条款。在用户单击accept之后,我需要将bool(AcceptedTerms)作为true传回。该值存在于数据库中,并且有一个存储库值(PortalUser.AcceptedTermsAndConditions),将用于从数据库中推送或拉取该值。在控制器中

[ChildActionOnly]
public ActionResult RenderLogIn()
{
    PortalUser portalUser = new PortalUser();
    LogInViewModels model = new LogInViewModels() { AcceptedTerms = portalUser.AcceptedTermsAndConditions };
    return PartialView("_LogIn", model);
}
然后在模型中:

public class LogInViewModels
{
    public bool AcceptedTerms { get; set; }
}
并且认为:

@if (Model.AcceptedTerms == false)
{
    <script> 
        $("#TOUModal").modal('show');

        function validateTerms() {
            var valid = ($("#chkTOU").prop("checked"));
            $("#submitTerms").prop("disabled", !valid);
        }

        $("#chkTOU").change(validateTerms);

        $("#submitTerms").click(function () {
            @Model.AcceptedTerms == true;
        });
    </script>
}

如何将所有这些联系在一起,以便在登录时正确地提取DB值,并且在接受术语时,在DB中更新值?

首先将新属性添加到LogInViewModels:UserID,并将其绑定到RenderLogIn()。然后,您必须在控制器中创建下一个方法(在其中存储RenderLogIn()方法)。我知道您希望使用javascript发送Model.AcceptedTerms数据,而不是提交表单,所以您必须创建对新创建的控制器方法的AJAX调用

LogInViewModels新属性:

public int UserId { get; set; }
修改的RenderLogIn()方法:

控制器的方法:

[HttpPost]
public ActionResult AcceptTermsAndConditions(int userId, Boolean accepted)
{
    UpdateAcceptedTermsAndConditions(userId, accepted);
    return PartialView("YourView");
}
视图中的Javascript ajax调用:

var model=@Html.Raw(Json.Encode(model));
$(“#提交者”)。单击(函数(){
model.AcceptedTerms=true;
$.ajax({
类型:“POST”,
url:'@url.Action(“AcceptTermsAndConditions”,“YourController”),
contentType:“应用程序/json;字符集=utf-8”,
数据:JSON.stringify(模型),
数据类型:“html”
});
});
有关将模型转换为json对象的更多信息:

[ChildActionOnly]
public ActionResult RenderLogIn()
{
    PortalUser portalUser = new PortalUser();
    LogInViewModels model = new LogInViewModels() { 
        AcceptedTerms = portalUser.AcceptedTermsAndConditions, 
        UserId = portalUser.Id }; // or you have to get this Id from other DB source
    return PartialView("_LogIn", model);
}
[HttpPost]
public ActionResult AcceptTermsAndConditions(int userId, Boolean accepted)
{
    UpdateAcceptedTermsAndConditions(userId, accepted);
    return PartialView("YourView");
}