代码之家  ›  专栏  ›  技术社区  ›  Metzer

c mvc-将viewmodel对象从视图传递到控制器

  •  0
  • Metzer  · 技术社区  · 6 年前

    当我试图将对象从我的视图传递到httppost方法时,我似乎遇到了困难。

    单击“我的视图”中的按钮时,代码将单击post方法,但没有数据被传递。我尝试过更新方法参数并传递不同的值(如int),但没有成功。

    下面是我的httppost方法:

        [HttpPost]
        public async Task<ActionResult> BookClass(MemberClassViewModel memberClassViewModel)
        {
            return RedirectToAction("Index");
        }
    

    传入的参数似乎总是空的。

    这是我的观点代码。模型的类型是IEnumerable,即我的ViewModel对象列表,在我的例子中是3个对象。我试图实现的是,单击适当的按钮,将导致一个对象被传递回我的httppost方法。我试过在'value'参数中传递不同的值。

    @model IEnumerable<GymTracker.ViewModel.MemberClassViewModel>
    
    
    @{
        ViewData["Title"] = "BookClass";
    }
    
    <h2>Book Class</h2>
    
    @foreach (var item in Model)
    {
        <form  method="post">    
            <div>    
                <hr />
                <dl class="dl-horizontal">    
                    <dt>
                        @Html.DisplayNameFor(model => model.ClassName)    
                    </dt>
                    <dd>
                        @Html.DisplayFor(modelItem => item.ClassName)
                    </dd>
                    <dt>    
                        <button>Book Class</button>
                        <input type="hidden" asp-action="BookClass" asp-controller="Members" value="@item"/>    
                    </dt>        
                </dl>
            </div>    
        </form>    
    }
    

    enter image description here 任何帮助都将不胜感激,

    感谢

    1 回复  |  直到 6 年前
        1
  •  2
  •   Anton Toshik    6 年前

    我把你的表格重新写了一点,这样你就可以明白你需要 name 与控制器端的命名相关的字段。

    如果你有 MyModel.PropertyName 模型对象,它必须具有某种属性/属性。你现在在做什么 item 你是想储存 MyModel 在一个永远无法工作的输入字段中。 MyMa模型 需要一个属性 MyAttribute 它可以是名称(字符串)或id(int)以与唯一的图书相关。

    @foreach (var item in Model)
    {
        <form asp-action="BookClass" asp-controller="Members" method="post">
            <button type="submit">Book Class</button>
            <input type="hidden" name="MyModel.MyAttribute" value="@item.MyAttribute"/>      
        </form>  
    }
    

    编辑:

    我明白你的意思,所以我想做的是,如果用户点击 在某个特定体育课的按钮上,它会被贴回 按照我的方法。然后我编写sql等(更新这个类 +1位会员已预订此服务)。

    你能做的是:

    @foreach (var gym in Model)
    {
        <a asp-action="BookClass" asp-controller="Members" asp-route-id="@gym.Id">@gym.Name</a>
    }
    

    在控制器中:

    [HttpGet([controller]/[action]/{id})]
    public ActionResult BookClass(int id)
    {
        //get the gym based on the id
    
        return RedirectToAction("Index");
    }