gpt4 book ai didi

asp.net-mvc - 如何将整个 ViewModel 传递回 Controller

转载 作者:行者123 更新时间:2023-12-04 18:47:23 25 4
gpt4 key购买 nike

我有一个包含两个对象的 ViewModel:

public class LookUpViewModel
{
public Searchable Searchable { get; set; }
public AddToSearchable AddToSearchable { get; set; }
}

两个包含的模型看起来像这样:
public class Searchable
{
[Key]
public int SearchableId { get; set; }
public virtual ICollection<AddToSearchable> AddedData { get; set; }
}

public class AddToSearchable
{
[Key]
public int AddToSearchableId { get; set;}
[Required]
public int SearchableId { get; set; }
[Required]
public String Data { get; set; }
[Required]
public virtual Searchable Searchable { get; set; }
}

我有一个 View 使用我的 LookUpViewModel并接收输入以搜索 SearchableId .如果 Searchable找到对象,一个 LookUpViewModel对象被创建并传递给 View 。然后 View 显示 AddToSearchable.Data 的编辑器字段.一旦提交,我想要 LookUpViewModel传递给一个 Action 方法来处理所有后端代码。唯一的问题是, LookUpViewModel传递给我的操作方法包含对 Searchable 的空引用以及对 AddToSearchable 的有效引用.. 即我丢失了一半的数据。

这是我的 View 的示例:
@model HearingAidTrackingSystem.ViewModels.LookUpViewModel

@using (Html.BeginForm("LookUp", "Controller", "idStr", FormMethod.Post))
{
<input type="text" name="idStr" id="idStr"/>
<input type="submit" value="Search" />
}

@if (Model.Searchable != null && Model.AddToSearchable != null)
{
using (Html.BeginForm("AddMyStuff", "Controller"))
{
Html.HiddenFor(model => model.Searchable.SearchableId);
Html.HiddenFor(model => model.Searchable.AddedData);
Html.HiddenFor(model => model.AddToSearchable.AddToSearchableId);
Html.HiddenFor(model => model.AddToSearchable.SearchableId);
Html.HiddenFor(model => model.AddToSearchable.Searchable);

<div class="editor-field">
@Html.EditorFor(model => model.AddToSearchable.Data)
@Html.ValidationMessageFor(model => model.AddToSearchable.Data);
</div>

<input type="submit" value="Submit" />
}
}

这是我的操作方法:
public ActionResult LookUp(LookUpViewModel vm)
{
return View(vm);
}

[HttpPost]
public ActionResult LookUp(string idStr)
{
int id = /*code to parse string to int goes here*/;

Searchable searchable = dal.GetById(id);
LookUpViewModel vm = new LookUpViewModel { Searchable = searchable,
AddToSearchable = new AddToSearchable() };
//When breakpoint is set, vm contains valid references
return View(vm);
}

[HttpPost]
public ActionResult AddMyStuff(LookUpViewModel vm)
{
//**Problem lies here**

//Do backend stuff
}

抱歉,帖子太长了。我尽力保持简单。您可能有任何建议......开火。

最佳答案

修复它的两种方法:

  • 您可以为 Model.Searchable 的所有属性添加 HiddenFor()。
  • 您可以使用序列化将 Model.Searchable 转换为文本演示,并从 Controller 中的序列化形式修复它。

  • 更新:问题是:您需要使用@Html.HiddenFor(),而不是Html.HiddenFor();。

    关于asp.net-mvc - 如何将整个 ViewModel 传递回 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12078808/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com