【发布时间】:2023-04-07 08:02:01
【问题描述】:
使用 MVC 5 和 Razor 页面。
场景是当我将 (int)colour 转换为名为 Color 的 Item 属性时,该属性在我的 HttpGet 方法中属于 INT 类型。这个值应该被传递给 ViewModel,我把它作为一个隐藏字段存储在 razor 视图上。
所以在调试我的代码时:
返回视图(视图模型); viewModel.Colour = 23 - 正确。
这将显示 Razor 视图,在这个 razor 视图中我将 model.House 值存储到隐藏字段中,因此我可以执行 HttpPost。
在这个阶段,我的原始 URL 是: applicationName/Orange/Item/Create?date=2014-08-05&_1236723545
请注意,url 中的 Color 参数中有 Orange,还有一个位于末尾的模型,它有一个 Color 属性,其编号为 23。
现在,一旦 iv 完成填写表格并按保存,ModelState 在此阶段无效,因为在剃刀视图中出于某种奇怪的原因 @Html.HiddenFor(model => model.Colour) 存储字符串值“Orange”而不是模型提供的 23。现在我明白了 URL 和我的对象模型中的名称冲突,但这肯定会起作用。
我的路线配置
routes.MapRoute(
name: "Item",
url: "{colour}/{controller}/{action}/{id}",
defaults: new { controller = "Item", action = "Index", id = UrlParameter.Optional }
);
我的 Get 方法:
[HttpGet]
public ActionResult Create(Colour colour, DateTime? date)
{
var viewModel = new Item()
{
ItemDate = (!date.HasValue ? DateTime.Now.Date : date.Value),
Colour = (int) colour,
ItemTypeId = 1
};
return View(viewModel);
}
我的发帖方式
[HttpPost]
public ActionResult Create(Item item)
{
if (ModelState.IsValid)
{
_itemService.Create(item);
return RedirectToAction("Index", "Item", new { date = item.itemDate.ToString("yyyy-MM-dd") });
}
return View(item);
}
所以我的问题是如何让我的剃刀视图忽略写在 url 中的颜色并使用作为 Item 属性的颜色。所以应该是 23 而不是“橙色”。
谁能给点建议?
【问题讨论】:
-
表单使用发布的数据和 URL 值的组合。有一个重复的名字不是一个好主意。你可以重命名你的路线参数,例如到
col,因为该名称并不重要(只要您在路由/链接中匹配它)? -
@TrueBlueAussie 谢谢,是的,我更改了路由参数名称,因为这是导致问题的原因,但是由于项目相当大,因此需要在链接中的其他位置进行更改,所以我找到了替代解决方案,因为我相信绑定导致了这个问题,所以在我的 Post 方法中我添加了 [Bind(Exclude = "Colour")],这已经解决了这个问题,而没有对项目的其他部分进行修改。不确定这是否是正确的方法,但会继续寻找。
标签: c# asp.net-mvc asp.net-mvc-4 razor enums