代码之家  ›  专栏  ›  技术社区  ›  Owen Pauling

在MVC中将一项从模型集合发布到控制器方法

  •  3
  • Owen Pauling  · 技术社区  · 8 年前

    我有一个显示用户列表的视图,将模型设置为:

    @model List<MyProject.Models.User>
    

    在此视图中,我希望能够选择对特定用户执行操作,即向控制器发送我要禁用用户的消息。如何将特定User对象发布到控制器?

    这就是我目前所了解的,但我不知道如何发布集合中的特定对象:

    @foreach (var c in Model)
    {
        <tr>
            <td>@c.Username</td>
            <td>@c.IsEnabled</td>
            <td>
                @using (Html.BeginForm("DisableUser", "UserManagement"))
                {
                    <input type="submit" value="Disable" class="btn btn-primary"/>
                }
            </td>
        </tr>
    }
    

    我的控制人有签名:

    public ActionResult DisableUser(User user)
    
    4 回复  |  直到 8 年前
        1
  •  2
  •   user3559349 user3559349    8 年前

    而不是将 User ,只需在 BeginForm() 方法回发ID或用户 . Assuming that property is named 用户ID `,然后

    @foreach (var c in Model)
    {
        <tr>
            ....
            <td>
                @using (Html.BeginForm("DisableUser", "UserManagement", new { id = c.UserId ))
                {
                    <input type="submit" value="Disable" class="btn btn-primary"/>
                }
            </td>
        </tr>
    }
    

    控制器方法是

    public ActionResult DisableUser(int id)
    {
        // Get the User based on id, update it and redirect
    }
    

    您还可以考虑使用ajax提交值,这将允许用户停留在同一页面上,并继续“禁用”其他 使用者 对象而无需进行重定向,在这种情况下,代码可能是

    @foreach (var c in Model)
    {
        <tr>
            ....
            <td>
                <button type="button" class="disable" data-id="@c.UserId">Disable</button>
            </td>
        </tr>
    }
    
    var url = '@Url.Action("DisableUser", "UserManagement")';
    $('.disable').click(function() {
        var row = $(this).closest('tr');
        $.post(url, { id: $(this).data('id') }, function(result) {
            if(result) {
                // for example, remove the row from the table
                row.remove();
            } else {
                // Oops
            }
        }).fail(function (result) {
            // Oops
        });
    });
    

    控制器方法是

    public JsonResult DisableUser(int id)
    {
        // Get the User based on id and update it
        return Json(true);
        // or if the update failed - return Json(null);
    }
    
        2
  •  0
  •   Brian Herbert    8 年前

    禁用用户的简单方法是使用Html。ActionLink而不是表单-您应该能够在模板代码中看到大量此类示例。动作链接可以重定向到确认页面,也可以只禁用用户并重定向到消息页面,显示“用户已被禁用”。

    我最好的方法是使用AJAX。您可以使用jQuery或MVC实现这一点 Ajax form Ajax Action Link 。我建议您搜索MVC Ajax Action Link示例。

    您可能还希望通过将链接的类设置为 Bootstrap 'btn' class .

        3
  •  0
  •   Arun Prasad E S    8 年前

    有一种方法可以发布单个用户

    @foreach (var c in Model)
    {
    <tr>
        <td>@c.Username</td>
        <td>@c.IsEnabled</td>
        <td>
            @using (Html.BeginForm("DisableUser", "UserManagement"))
            {
               <input type="text" name="Username" value="@c.Username">
                <input type="text" name="IsEnabled" value="@c.IsEnabled">
                <input type="hidden" name="id" value="@c.id">
    
                <input type="submit" value="Disable" class="btn btn-primary"/>
            }
        </td>
    </tr>
    }
    

    想法是一样的,由于时间不够,请按照您的要求进行,使用类属性名称作为输入名称,操作将获得值

        4
  •  -1
  •   Govinda Rajbhar    8 年前

    首先,您不能声明Html。BeginForm位于任何循环内,用于将对象发布到控制器。

    @using (Html.BeginForm("DisableUser", "UserManagement"))
    {
        @foreach (var c in Model)
        {
            <tr>
                <td>@c.Username</td>
                <td>@c.IsEnabled</td>
                <td>           
                    <input data-id="@c.Id" type="submit" value="Disable" class="clsBtnPost btn btn-primary"/>           
                </td>
            </tr>
        }
    }
    

    这是供你参考的

    $(document).ready(function(){
       $(".clsBtnPost").click(function(){
            var userId = $(this).data("id");
            $.ajax({
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            type: 'POST',
            url: 'ControllName/MethodName', //Your Url
            data: { 'userId': userId },
            success: function () {          
               alert("successfully called.");
            },
            failure: function (response) {          
               alert("Error");
            }
          }); 
       });
    });
    

    你可以用 ajax 调用将单个对象传递给控制器。