加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何将整个ViewModel传递回控制器

发布时间:2020-12-16 07:05:00 所属栏目:asp.Net 来源:网络整理
导读:我有一个包含两个对象的ViewModel: public class LookUpViewModel{ public Searchable Searchable { get; set; } public AddToSearchable AddToSearchable { get; set; }} 两个包含的模型看起来像这样: public class Searchable{ [Key] public int Searcha
我有一个包含两个对象的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; }
}

我有一个视图,使用我的LookUpViewModel并接收输入来搜索SearchableId.如果找到Searchable对象,则会创建一个LookUpViewModel对象并将其传递给View.然后,该视图显示AddToSearchable.Data的编辑器字段.提交后,我希望将LookUpViewModel传递给action方法来处理所有后端代码.唯一的问题是,传递给我的action方法的LookUpViewModel包含对Searchable的空引用和对AddToSearchable的有效引用.即我丢失了一半的数据.

以下是我的视图的示例:

@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的所有属性添加to HiddenFor().
>您可以使用序列化将Model.Searchable传输到文本演示文稿中,并从控制器中的序列化形式进行修复.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读