【问题标题】:How to send View Model only from Main Model in asp.net mvc?如何仅从 asp.net mvc 中的主模型发送视图模型?
【发布时间】:2020-12-14 01:36:15
【问题描述】:

我的 MVC 表单使用 HTML.BeginForm。这里是 html 代码


@model TodayViewModel
@{
    ViewBag.Title = "Work Completed Today";
    Layout = "~/Views/Shared/_LayoutBackend.cshtml";
}

 @using (Html.BeginForm("Create", "CustomActivity", FormMethod.Post, new { role = "form", @id = "customActivityForm", @class = "activityForm" }))
                    {
                        <div>
                            <div class="myClass">
                            </div>

                            <div class="container" id="workordercategories">
                                @Html.LabelFor(m => m.CustomActivity.WorkOrderCategoriesName, new { @class = "" })
                                @Html.TextBoxFor(m => m.CustomActivity.WorkOrderCategoriesName, new { @class = "w100p mb0" })
                                @Html.ValidationMessageFor(m => m.CustomActivity.WorkOrderCategoriesName, "", new { @class = "text-danger" })
                            </div>


                            <div class="container" id="activity">
                                @Html.LabelFor(m => m.CustomActivity.Activity, new { @class = "" })
                                @Html.TextBoxFor(m => m.CustomActivity.Activity, new { @class = "w100p mb0" })
                                @Html.ValidationMessageFor(m => m.CustomActivity.Activity, "", new { @class = "text-danger" })
                            </div>
                        </div>
                     }

我的视图模型是

  public class TodayViewModel
    {
        public IList<TodayListViewModel> TodaysVM { get; set; }
        public CustomActivityViewModel CustomActivity { get; set; }

    }

 public class CustomActivityViewModel
    {
        [Required, Display(Name = "Work Category Name")]
        public string WorkOrderCategoriesName { get; set; }
        [Required]
        public string Activity { get; set; }
    }

在提交表单时,控制器方法是:

[HttpPost]
        public ActionResult Create(TodayViewModel model)
        {
            // to do here
        }

在控制器方法中,我必须使用TodayViewModel,其中有两种方法,其中(TodaysVM) 始终为空。有什么方法可以提交表单以便我可以在控制器中使用 CustomActivityViewModel 而不是TodayViewModel?现在如果我使用 CustomActivityViewModel,控制器中的值为 null。

【问题讨论】:

  • 您可以 - 但这是一项繁重的工作,因为您需要在 HTML 输入上呈现您自己的 name="" 值。这是 ASP.NET MVC 的一个主要缺点,它一直存在于 ASP.NET Core 中,不幸的是:(
  • 为什么不在视图中也使用CustomActivityViewModel
  • 鉴于表单以外的字段更多,因此这些值来自TodayVM。所以我不能使用 CustomActivityViewModel

标签: c# asp.net-mvc asp.net-mvc-3 razor


【解决方案1】:

如果你不能在视图中使用CustomActivityViewModel试试

[HttpPost]
public ActionResult Create(TodayViewModel model)
{
     CustomActivityViewModel obj = model.CustomActivity;

     //....
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 2010-11-24
    • 2014-01-07
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多