模型未传递给控制器​​(MVC核心)

时间:2020-09-28 04:04:20

标签: asp.net-mvc asp.net-core-mvc

我在视图中有一个表单,按钮可以将其发布回控制器。 除了传递的模型为空之外,其他所有操作都有效(它没有将模型传递给控制器​​)​​。我在这里查看了其他一些答案,但我的代码应该工作,但事实并非如此。我在做什么错了?

查看摘要:

@model LogModel

@using (Html.BeginForm("IPblocking", "Log", FormMethod.Post, @Model))
    {
        <button type="submit" class="btn btn-primary" name="btnIPblocking" value="block">
            @T("Admin.Custom.IPblocking.BlacklistButton")
        </button>
        <button type="submit" class="btn btn-primary" name="btnIPblocking" value="unblock">
            @T("Admin.Custom.IPblocking.WhitelistButton")
        </button>
    }

控制器代码段:

    //IPblocking
    [HttpPost]
    public virtual IActionResult IPblocking(LogModel model,string btnIPblocking)
    {
        if (!_permissionService.Authorize(StandardPermissionProvider.ManageSystemLog))
            return AccessDeniedView();

        //TODO: code to call IP block or unblock routine depending on button value

        return RedirectToAction("List");
    }

问题在于模型对象基本上是空的!将视图的模型返回给控制器的诀窍是什么?

2 个答案:

答案 0 :(得分:0)

根据您的代码,我发现您没有将model属性作为表单数据发布到控制器操作:

如果您不想在客户端修改模型值,建议您尝试将其添加为hiddenfield,然后将其发布到操作中。

赞:

@Html.HiddenFor(x=>x.Id);

更多详细信息,您可以参考以下代码:

@model LogModel

@using (Html.BeginForm("IPblocking", "Log", FormMethod.Post))
    {
        @Html.HiddenFor(x=>x.Id);
        <button type="submit" class="btn btn-primary" name="btnIPblocking" value="block">
            @T("Admin.Custom.IPblocking.BlacklistButton")
        </button>
        <button type="submit" class="btn btn-primary" name="btnIPblocking" value="unblock">
            @T("Admin.Custom.IPblocking.WhitelistButton")
        </button>
    }

我的日志模型:

public class LogModel {
    public int Id { get; set; }
}

结果:

enter image description here

答案 1 :(得分:0)

我最终使用的是: 查看:

let myLayout = UICollectionViewFlowLayout()
self.myCollectionOutlet.setCollectionViewLayout(myLayout, animated: true)

控制器:

@model LogModel
<form asp-controller="Log" asp-action="IPblocking" method="post">
    <input type="hidden" name="ipblocking_IpAddress" value="@Model.IpAddress" />
    <div class="content">
        <div class="form-group">
            <div class="col-md-12">
                <button type="submit" class="btn btn-primary" name="btnIPblocking" value="block">
                    @T("Admin.Custom.IPblocking.BlacklistButton")
                </button>
                <button type="submit" class="btn btn-primary" name="btnIPblocking" value="unblock">
                    @T("Admin.Custom.IPblocking.WhitelistButton")
                </button>
            </div>
        </div>
    </div>
</form>

模型(我之前没有发布,但是在这里):

//IPblocking
[HttpPost]
public virtual IActionResult IPblocking(string ipblocking_IpAddress,string btnIPblocking)
{
    if (!_permissionService.Authorize(StandardPermissionProvider.ManageSystemLog))
        return AccessDeniedView();

    //TODO: code to call IP block or unblock routine depending on button value
    if (btnIPblocking != null && ipblocking_IpAddress != null)
    {
        try
        {
            //block or unblock ip address here
            bool result = false;
            if (btnIPblocking == "block")
            {
                result = Nop.Web.Custom.MyData.IPAddress_BlackList_Insert(ipblocking_IpAddress);
                if (result)
                {
                    _notificationService.SuccessNotification(_localizationService.GetResource("Admin.Custom.IPblocking.Success"));
                }
                else
                {
                    _notificationService.SuccessNotification(_localizationService.GetResource("Admin.Custom.IPblocking.Fail"));
                }
            }
            else
            {
                result = Nop.Web.Custom.MyData.IPAddress_BlackList_Delete(ipblocking_IpAddress);
                if (result)
                {
                    _notificationService.SuccessNotification(_localizationService.GetResource("Admin.Custom.IPblocking.Unblock.Success"));
                }
                else
                {
                    _notificationService.SuccessNotification(_localizationService.GetResource("Admin.Custom.IPblocking.Unblock.Fail"));
                }
            }
        }
        catch (Exception exc)
        {
            _notificationService.ErrorNotification(exc.Message);
        }
    }

    return RedirectToAction("List");
}

仍然不确定如何传递整个模型,但这仅适用于模型中的一个值。 (因此,这并不是我最初提出的问题的答案)。使用ASP.Net Core 2.2