简体   繁体   English

我的 ViewModel 流程正确吗? 如何将其发送回 controller 并在 controller 操作中刷新它?

[英]Is my ViewModel flow right? How to send it back to controller and refresh it on a controller action?

Is my ViewModel flow right?我的 ViewModel 流程正确吗? The ' SubObjectViewModel ' class usage is a bad or a good practice? ' SubObjectViewModel ' class 的用法是好还是坏? Or should I try other option, like creating a ViewModel only to this class?或者我应该尝试其他选项,比如只为这个 class 创建一个 ViewModel?

And also, how should I return the ViewModel ' ObjectViewModel ' to the controller with all its values, change them and refresh values from page view?而且,我应该如何将 ViewModel ' ObjectViewModel '及其所有值返回到 controller,更改它们并从页面视图刷新值?

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

My Controller我的 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);     

}

My View我的观点

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

Thanks in advance.提前致谢。

how should I return the ViewModel 'ObjectViewModel' to the controller with all its values我应该如何将 ViewModel 'ObjectViewModel' 及其所有值返回给 controller

To achieve above requirement, you can refer to the following code snippet.要实现上述要求,您可以参考以下代码片段。

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

Controller Actions Controller 操作

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

    //...

    return View(objVM);
}

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

    //...

Test Result测试结果

在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM