Передача многих параметров с использованием классов данных в действии ASP.NET MVC - PullRequest
0 голосов
/ 16 октября 2018

У меня есть два класса, которые содержат только данные (Настройки и Учетные данные).Я не знаю, как мне называть эти классы, так что терпите меня.

Пример классов данных.

class Settings
{

        public string Host { get; set; }
        public int Port { get; set; }

}


class Credentials
{

        public string UserName { get; set; }
        public string Password { get; set; }

}

Я хочу создать новый объект, содержащий эти два класса данных, используяДействие контроллера MVC.

Пример класса объекта.

class Object
{
        private readonly Settings _settings;
        private readonly Credentials _credentials;

        public Object(Settings settings, Credentials credentials)
        {
            _settings = settings;
            _credentials = credentials;
        }
}

Пример того, что я пытаюсь сделать.

public class HomeController : Controller
{
        public IActionResult Index()
        {
            return View();
        }

        [HttpPost]
        public IActionResult Create(Settings settings, Credentials credentials)
        {
            new Object(settings, credentials);

            return View(Index());
        }
}

Мой вопрос, как этого добиться?это хорошая манера?Без необходимости помещать каждый отдельный параметр в метод IActionResult Create () .

И как должна выглядеть моя форма POST?

Спасибо.

1 Ответ

0 голосов
/ 16 октября 2018

Вы почти правильно поняли.Модели, которые я хотел бы использовать:

public class Settings
{
    public string Host { get; set; }
    public int Port { get; set; }

}

public class Credentials
{
    public string UserName { get; set; }
    public string Password { get; set; }
}

class Object
{
    private readonly Settings _settings;
    private readonly Credentials _credentials;

    public Object(Settings settings, Credentials credentials)
    {
        _settings = settings;
        _credentials = credentials;
    }
}

public class ObjectView
{
    public Settings Settings { get; set; }
    public Credentials Credentials { get; set; }
}

Действия контроллера:

public IActionResult Index()
{
    return View();
}

public IActionResult Create()
{
    return View(new ObjectView());
}

[HttpPost]
public IActionResult Create(ObjectView objectView)
{
    var obj = new Object(objectView.Settings, objectView.Credentials);

    return RedirectToAction("Index");
}

Razor View для создания модели:

@model ObjectAsParametersInAction.Models.ObjectView
@{
    ViewBag.Title = "View";
}
<h2>View</h2>
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    <div class="form-horizontal">
        <h4>ObjectView</h4>
        @Html.LabelFor(m => m.Credentials.UserName)
        @Html.EditorFor(m => m.Credentials.UserName)
        @Html.LabelFor(m => m.Credentials.Password)
        @Html.EditorFor(m => m.Credentials.Password)

        @Html.LabelFor(m => m.Settings.Host)
        @Html.EditorFor(m => m.Settings.Host)
        @Html.LabelFor(m => m.Settings.Port)
        @Html.EditorFor(m => m.Settings.Port)
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}
<div>
    @Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

Данные опубликованной формы в запросе будут содержать параметры, например:

Credentials.UserName=John&Credentials.Password=Unkown&Settings.Host=127.0.0.1&Settings.Port=80

Все это будет привязано к модели с общими свойствами ObjectView в действии Создать пост.

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