Как передать значение из представления в хранилище в ASP.NET? - PullRequest
2 голосов
/ 23 октября 2019

Я работаю над веб-порталом ASP.NET MVC, который требует, чтобы пользователи принимали Условия использования при первом входе в систему. После того, как пользователь щелкнет по кнопке подтверждения, мне нужно вернуть 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>
}

Наконец, у меня есть метод хранилищачтобы обновить значение в БД:

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

Как связать все эти вещи вместе, чтобы при входе в систему я правильно вводил значение БД, а когда условия принимались, значенияобновляется в БД?

1 Ответ

0 голосов
/ 23 октября 2019

Начните с добавления нового свойства в LogInViewModels: UserID и связать его в RenderLogIn (). Затем вы должны сделать следующий метод в контроллере (тот, в котором вы храните метод RenderLogIn ()). Я вижу, что вы хотите использовать javascript для отправки данных Model.AcceptedTerms вместо формы отправки, поэтому вам нужно создать 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);
}

Метод контроллера:

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

Ajax-вызов Javascript вview:

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: Как использовать значения Razor в функции javascript?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...