问题描述
我在视图中有一个表单,按钮可以将其发布回控制器。 除了传递的模型为空之外,其他所有操作都有效(它没有将模型传递给控制器)。我在这里查看了其他一些答案,但我的代码应该工作,但事实并非如此。我在做什么错了?
查看摘要:
@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");
}
问题在于模型对象基本上是空的!将视图的模型返回给控制器的诀窍是什么?
解决方法
根据您的代码,我发现您没有将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; }
}
结果:
,我最终使用的是: 查看:
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