簡體   English   中英

我的 ViewModel 流程正確嗎? 如何將其發送回 controller 並在 controller 操作中刷新它?

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

我的 ViewModel 流程正確嗎? ' SubObjectViewModel ' class 的用法是好還是壞? 或者我應該嘗試其他選項,比如只為這個 class 創建一個 ViewModel?

而且,我應該如何將 ViewModel ' ObjectViewModel '及其所有值返回到 controller,更改它們並從頁面視圖刷新值?

我的視圖模型

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
}

我的 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>

提前致謝。

我應該如何將 ViewModel 'ObjectViewModel' 及其所有值返回給 controller

要實現上述要求,您可以參考以下代碼片段。

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

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

    //...

    return View(objVM);
}

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

    //...

測試結果

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM