繁体   English   中英

C#MVC-将ViewModel对象从View传递到Controller

[英]C# MVC - Passing ViewModel object from View to Controller

当我尝试将对象从View传递到HttpPOST方法时,似乎有些困难。

单击我的视图中的按钮后,代码将触发POST方法,但没有数据通过。 我尝试过更新方法参数并传递不同的值(如Ints),但无济于事。

这是我的HttpPOST方法:

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

传入的参数始终似乎为NULL。

这是我的视图的代码。 该模型的类型为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>    
}

在此处输入图片说明 任何帮助将不胜感激,

谢谢

我已经将您的表单重新写得更加裸露,因此您可以理解,您需要name字段与控制器端的命名相关。

如果您有MyModel.PropertyName Model对象,则它必须具有某种属性/属性。 您现在正在使用item操作是尝试将MyModel存储在永远不会起作用的输入字段中。 MyModel需要一个属性,我们称它为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>  
}

编辑:

我明白了您的意思,所以我要尝试做的是,如果用户单击特定Gym班级的某个按钮,该操作将被发布回我的方法。 然后,我进行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");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM