Правильно ли работает мой ViewModel? Как отправить его обратно в контроллер и обновить sh в действии контроллера? - PullRequest
0 голосов
/ 02 мая 2020

Правильно ли работает мой ViewModel? Использование класса ' SubObjectViewModel ' является плохой или хорошей практикой? Или я должен попробовать другой вариант, например, создать ViewModel только для этого класса?

А также, как мне вернуть ViewModel ' ObjectViewModel ' в контроллер со всеми его значениями, изменить их и refre sh значения из вида страницы?

Моя ViewModel

Public class ObjectViewModel{

    public string name { get; set; }
    public int value { get; set; }
    public bool IsCameraPermited { get; set; }

    public List<SubObjectViewModel> choosenSubObjects{ get; set; } // need to get it back on controller;

     public class SubObjectViewModel
     {
        public int IdObject { get; set; }
        public string Name { get; set; }
        public string Config { get; set; }

     }     

       public List<Object> listSub{ get; set; } //list that will be filled on 'Create' Controller
}

Мой контроллер


public IActionResult Create(int id)
{

  List<Object> listSubObject = new List<Object>();
  listSubObject = _getAllSubObjectsDAO.ListByID(id);


  List<Object> choosenObjects= new List<Object>();
  choosenObjects = _getChoosenObjectsDAO.ListByID(id);

  List<SubObjectViewModel> listSubObject = new List<SubObjectViewModel>();

  foreach (Object item in choosenObjects )
  {
      string  config = _configurationDAO.GetConfigurationById(item.configId);

      ObjectViewModel .SubObjectViewModel SubObject = new ObjectViewModel .SubObjectViewModel { IdObject = item.Id, Name = item.Name ,  Config = config };
      listSubObject.Add(setorVM);
  }

  ObjectViewModel objVM = ObjectViewModel{
    name ="test",
    value = 2,
    IsCameraPermited =true,  
    listSub = listSubObject,
    choosenSubObjects = listSubObject
  };

  return View(objVM);     

}

Мой вид

@model Project.Models.ViewModels.ObjectViewModel
... more code 

<form asp-action="Create">

    <div class="row">
        <div class="col-sm-6 ctnFullHeight">
            <div class="shadowBoxForm formCreateLeft position-absolute col-sm-11 ctnFullHeight">
                <div asp-validation-summary="ModelOnly" class="text-danger"></div>

                <div class="form-group">
                    <input asp-for="name " class="form-control" />
                    <span asp-validation-for="name " class="text-danger"></span>
                </div>
                <div class="form-group">

                    <label asp-for="IsCameraPermited" class="control-label"></label>
                    <input asp-for="IsCameraPermited" type="checkbox" />
                </div>
                <div class="form-group float-right position-relative">
                    <input type="submit" value="Save" class="btn btn-default" />
                </div>
            </div>
        </div>
        <div class="col-sm-6">
            <div class="shadowBoxForm formCreateLeft position-absolute col-sm-11 ">
                @foreach (var item in listSub)
                {
                    <div class="txt">
                        @item
                    </div>
                }
            </div>

        </div>

    </div>

</form>

Спасибо заранее.

1 Ответ

0 голосов
/ 04 мая 2020

как мне вернуть ViewModel 'ObjectViewModel' в контроллер со всеми его значениями

Чтобы выполнить вышеуказанные требования, вы можете обратиться к следующему фрагменту кода.

@model ObjectViewModel

@{
    ViewData["Title"] = "Create";
    var choosenSubObjects = Model.choosenSubObjects;
}

<form method="post">
    <div class="row">
        <div class="col-sm-6 ctnFullHeight">
            <div class="shadowBoxForm formCreateLeft position-absolute col-sm-11 ctnFullHeight">
                <div asp-validation-summary="ModelOnly" class="text-danger"></div>

                <div class="form-group">
                    <input asp-for="name " class="form-control" />
                    <span asp-validation-for="name " class="text-danger"></span>
                </div>
                <div class="form-group">

                    <label asp-for="IsCameraPermited" class="control-label"></label>
                    <input asp-for="IsCameraPermited" type="checkbox" />
                </div>
                <div class="form-group float-right position-relative">
                    <input type="submit" value="Save" class="btn btn-default" />
                </div>
            </div>
        </div>
        <div class="col-sm-6">
            <div class="shadowBoxForm formCreateLeft position-absolute col-sm-11 ">
                @for (var i = 0; i < Model.choosenSubObjects.Count; i++)
                {
                <div class="txt">
                    <div class="form-group">

                        <label asp-for="@choosenSubObjects[i].IdObject" class="control-label"></label>
                        <input asp-for="@choosenSubObjects[i].IdObject" type="text" />
                    </div>
                    <div class="form-group">

                        <label asp-for="@choosenSubObjects[i].Name" class="control-label"></label>
                        <input asp-for="@choosenSubObjects[i].Name" type="text" />
                    </div>
                    <div class="form-group">

                        <label asp-for="@choosenSubObjects[i].Config" class="control-label"></label>
                        <input asp-for="@choosenSubObjects[i].Config" type="text" />
                    </div>
                </div>
                }

            </div>

        </div>

    </div>

</form>

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

[HttpGet]
public IActionResult Create(int id)
{
    //code logic here

    //...

    return View(objVM);
}

[HttpPost]
public IActionResult Create(ObjectViewModel objectViewModel)
{
    //code logic here

    //...

Результат теста

enter image description here

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