MVC Razor C#中img调用控制器方法时参数CustomerLinkItemCode为null
问题:MVC控制器方法参数始终为null(方法已触发)
在MVC Razor C#项目中,调用控制器的SelectItemImage方法时,方法确实被触发,但参数CustomerLinkItemCode始终为null。
控制器代码
//控制器方法 public ActionResult SelectItemImage(string CustomerLinkItemCode) { //创建模型对象 ItemImageMaster itemImageMaster = new ItemImageMaster(); //调用方法从数据库获取图片字节 itemImageMaster = CustomerItemLinkRepository.SelectItemImage(CustomerLinkItemCode); //以文件形式返回字节数据 return File(itemImageMaster.ItemImageData, "image/png"); }
视图代码
//在Razor视图中调用控制器方法 <img src="/Kart/SelectItemImage/@Model.CustomerItemLinkMaster.CustomerItemLinkDetailsList[i].CustomerLinkItemCode" alt="" height=75 width=60 id="CustomerLinkItemCode" name="CustomerLinkItemCode"/>
原因分析
当前视图使用路由段传递参数(/控制器/方法/参数值)的方式,但MVC默认路由模板({controller}/{action}/{id})只会将最后一段路由值绑定到名为id的参数。你的参数名是CustomerLinkItemCode,和默认路由的参数名不匹配,导致无法自动绑定。
解决方案
方案1:修改参数名匹配默认路由
将控制器方法的参数名改为id,直接匹配默认路由的参数:
public ActionResult SelectItemImage(string id) { ItemImageMaster itemImageMaster = new ItemImageMaster(); itemImageMaster = CustomerItemLinkRepository.SelectItemImage(id); return File(itemImageMaster.ItemImageData, "image/png"); }
方案2:使用查询字符串传递参数
修改视图的img标签,通过查询字符串传递参数,MVC会自动绑定到同名参数:
<img src="/Kart/SelectItemImage?CustomerLinkItemCode=@Model.CustomerItemLinkMaster.CustomerItemLinkDetailsList[i].CustomerLinkItemCode" alt="" height=75 width=60 id="CustomerLinkItemCode" name="CustomerLinkItemCode"/>
方案3:添加自定义路由(或使用属性路由)
方式A:配置全局自定义路由
在RouteConfig.cs中添加匹配当前参数名的路由:
routes.MapRoute( name: "ItemImageRoute", url: "Kart/SelectItemImage/{CustomerLinkItemCode}", defaults: new { controller = "Kart", action = "SelectItemImage", CustomerLinkItemCode = UrlParameter.Optional } );
方式B:使用属性路由
在控制器方法上添加Route特性,并确保项目启用了属性路由(在RouteConfig.cs中添加routes.MapMvcAttributeRoutes();):
[Route("Kart/SelectItemImage/{CustomerLinkItemCode}")] public ActionResult SelectItemImage(string CustomerLinkItemCode) { // 原代码保持不变 }
内容的提问来源于stack exchange,提问作者ManojMokavoor
相关产品推荐
相关产品推荐

