【问题标题】:Pass Object from view to controller using mvc4使用 mvc4 将对象从视图传递到控制器
【发布时间】:2018-01-01 08:00:03
【问题描述】:

查看

@if (weekMaster != null)
 {
  using (Html.BeginForm("UpdatePlan", "generalPlan", FormMethod.Post, new {  }))
  {
  <table class="table-bordered">
   <tr>
   @foreach (TermMaster obj in weekMaster.ToList())
    {
    <td align="center">
   <span>  @obj.termStartDate.ToString("dd MMM") - @obj.termEndDate.ToString("dd MMM")</span>
    <br />
    <input type="hidden" name="ObjHid" value="@obj" />
    <input type="hidden" name="startDate" value="@obj.termStartDate" />
    <input type="hidden" name="endDate" value="@obj.termEndDate" />
    <input type="text" style="width:80%" name="weekSession" />
  </td>
 }
  <td>
 <input type="submit" value="Update" class="btn-primary" />
  </td>
 </tr>
 </table>
 } }

控制器

   [HttpPost]
    public ActionResult UpdatePlan(List<DateTime> startDate, List<DateTime> endDate, List<int> weekSession, List<TermMaster> ObjHid)
    {
        return View();
    }

我正在尝试使用输入法 &lt;input type="hidden" name="ObjHid" value="@obj" /&gt;Class Object from View to Controller 传递到 TermMaster 类对象传递之上,但如果传递像 startDateendDate 这样的单个值,则显示 NULL 值,那么它可以正常工作。

我的代码有什么问题?如何在 Post 方法中传递类对象列表?

请参考图片

【问题讨论】:

  • 建议你参考this answer
  • 但是通过尝试发回您甚至没有编辑的TermMaster 集合来降低应用程序的性能有什么意义
  • @StephenMuecke 在 post 方法中我正在插入一些带有文本框值的参数值,因为我需要来自 TermMaster 的一些值
  • 对不起,这没有意义。你是说TermMaster 有一个与&lt;input type="text" .../&gt; 相关的属性吗?并阅读链接以了解如何为集合生成视图。

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-5


【解决方案1】:

你必须通过以下方法来做到这一点。

创建一个模型而不是多个参数,并在cshtml中使用索引。

public class model
{
    public List<DateTime> startDate { get; set; }
    public List<DateTime> endDate { get; set; }
    public List<int> weekSession { get; set; }
    public List<TermMaster> ObjHid { get; set; }
}

CSHTML

@{ int i = 0; }
@foreach (TermMaster obj in weekMaster.ToList())
    {
    <td align="center">
   <span>  @obj.termStartDate.ToString("dd MMM") - @obj.termEndDate.ToString("dd MMM")</span>
    <br />

    <input type="hidden" name="ObjHid[@i].termStartDate" value="@obj.termStartDate.ToString("dd MMM")" />
    <input type="hidden" name="ObjHid[@i].termStartDate" value="@obj.termStartDate.ToString("dd MMM")" />

    <input type="hidden" name="startDate[@i]" value="@obj.termStartDate" />
    <input type="hidden" name="endDate[@i]" value="@obj.termEndDate" />
    <input type="text" style="width:80%" name="weekSession[@i]" />
  </td>

   i++
 }

【讨论】:

  • 错误 - &lt;input&gt; 仅回发单个值,obj 是一个复杂对象(您的第一个输入生成 value="AssemblyName.TermMaster",它无法绑定到复杂对象。
  • @StephenMuecke 我已经修改了我的答案..:)
  • 你还觉得我的回答错了吗。我知道这些绑定是如何工作的。名称属性与属性映射。我不确定 startDate , endDate 但 ObjHid 肯定会被映射。
【解决方案2】:

您不能通过输入将对象绑定到控制器。您可以将对象序列化为 json。在控制器中,您可以将输入值作为字符串并将其反序列化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    相关资源
    最近更新 更多