Привязка данных в ASP.NET MVC Core - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь прочитать из HTML-формы некоторые данные. Мне удалось сделать это в ASP.NET MVC, но не в ASP.NET MVC CORE. Любая помощь будет оценена! Хаим

Этот CSHTML-код на ASP.NET MVC (работал нормально):

@using (Html.BeginForm("Login", "Account")){
<form class="form-group" action="Login" method="post">
        <input name="AccountAddressTxt" type="text" class="form-control"  required="required" id="AccountAddress" placeholder="Enter Your Account   Address" style="width:50%" onclick="SetOx()">
        <br />
        <input name="AccountPasswordTxt" type="password" class="form-control" required="required" id="AccountprivateKey" placeholder="Enter Your Account Private Key" style="width:50%">
         <input id="loginBtn" type="submit" class="btn btn-success" style="width:50% ;" value="  Login">
</form>

И привязка данных (работала нормально):

namespace RealEstate-Web_app.ModelsBinders
{

public class AccountBinder: IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        HttpContextBase objContext = controllerContext.HttpContext;
        String _accountAddress = objContext.Request.Form["AccountAddressTxt"];
        String _accountPassword = objContext.Request.Form["AccountPasswordTxt"];

        Account obj = new Account()
        {
            AccountAddress = _accountAddress;
            AccountPassword = _accountPassword;
        };
        return obj; 
    }
}

}

Прямо вконтроллер (работал нормально):

[HttpPost]
public IActionResult Login([ModelBinder(typeof(AccountBinder))] Account  acc)
{
    return View("Login", acc);
}

Но в ASP.NET MVC CORE я получаю другой метод, не зная, что делать:

...   
using Microsoft.AspNetCore.Mvc.ModelBinding;

namespace RealEstate_Web_app.ModelBinders
{
    public class AccountBinder : IModelBinder
    {
        public Task BindModelAsync(ModelBindingContext bindingContext)
        {
          //What am I suppose to do here?

        }
    }
}

1 Ответ

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

Следуйте формату, подобному тому, что было сделано ранее. Следует отметить некоторые изменения в новой версии.

namespace RealEstate_Web_app.ModelBinders {

    public class AccountBinder : IModelBinder {
        public Task BindModelAsync(ModelBindingContext bindingContext) {
            if (bindingContext == null) {
                throw new ArgumentNullException(nameof(bindingContext));
            }

            var modelName = bindingContext.ModelName;

            HttpContext httpContext = bindingContext.HttpContext;
            String _accountAddress = httpContext.Request.Form["AccountAddressTxt"];
            String _accountPassword = httpContext.Request.Form["AccountPasswordTxt"];

            Account model = new Account() {
                AccountAddress = _accountAddress;
                AccountPassword = _accountPassword;
            };

            //TODO: validate and update model state if not valid
            //...

            bindingContext.Result = ModelBindingResult.Success(model);
            return Task.CompletedTask;
        }
    }
}

Ссылка Связывание пользовательской модели в ASP.NET Core

...