gpt4 book ai didi

c# - 如何将值从 View 传递到 ASP.NET 中的存储库?

转载 作者:太空宇宙 更新时间:2023-11-03 14:38:52 25 4
gpt4 key购买 nike

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

[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; }
}

在 View 中:

@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>
}

最后,我有一个存储库方法来更新数据库中的值:

public void UpdateAcceptedTermsAndConditions( int UserID, Boolean Accepted )
{
VerifyConnectionString_LicensePortal();

SqlDataSource sqlDataSource = new SqlDataSource( ConnectionString_LicensePortal, "" );

String strSQLQuery = "UPDATE [dbo].[Users] SET [AcceptedTermsAndConditions] = @Accepted WHERE [UserId] = @UserID;";

sqlDataSource.UpdateCommand = strSQLQuery;

sqlDataSource.UpdateCommandType = SqlDataSourceCommandType.Text;

sqlDataSource.CancelSelectOnNullParameter = false;

sqlDataSource.UpdateParameters.Clear();

sqlDataSource.UpdateParameters.Add( "Accepted", DbType.Boolean, Accepted.ToString() );
sqlDataSource.UpdateParameters.Add( "UserID", DbType.Int32, UserID.ToString() );

sqlDataSource.Update();
}

我如何将所有这些东西联系在一起,以便在登录时正确地提取数据库值,并在接受条款后,在数据库中更新这些值?

最佳答案

首先将新属性添加到 LogInViewModels:UserID 并将其绑定(bind)到 RenderLogIn() 中。然后你必须在 Controller 中创建下一个方法(一个,你在其中存储 RenderLogIn() 方法)。我看到您想使用 javascript 发送 Model.AcceptedTerms 数据而不是提交表单,因此您必须创建对新创建的 Controller 方法的 AJAX 调用。

LogInViewModels 新属性:

public int UserId { get; set; }

修改后的 RenderLogIn() 方法:

[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);
}

Controller 的方法:

[HttpPost]
public ActionResult AcceptTermsAndConditions(int userId, Boolean accepted)
{
UpdateAcceptedTermsAndConditions(userId, accepted);
return PartialView("YourView");
}

View 中的 Javascript ajax 调用:

var model = @Html.Raw(Json.Encode(Model));
$("#submitTerms").click(function () {
model.AcceptedTerms = true;
$.ajax({
type: "POST",
url: '@Url.Action("AcceptTermsAndConditions", "YourController")',
contentType: "application/json; charset=utf-8",
data: JSON.stringify(model),
dataType: "html"
});
});

有关将模型转换为 json 对象的更多信息: How do I use Razor values in a javascript function?

关于c# - 如何将值从 View 传递到 ASP.NET 中的存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58529325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com