首页 新闻 会员 周边 捐助

高分求答案。阿里云服务器mvc3项目单个传参页面接收不到,其他的页面正常使用。求解决。。

0
悬赏园豆:100 [已解决问题] 解决于 2014-03-28 10:19

阿里云服务器遇到,刚换的服务器还没解决了呢   。上边的是传参接收页面,

本地iis  和原来服务器都没遇到这个错误。下边的是地址栏有参数传过来 

页面上就出现这个错误。

 

当我把接收类型 从int  换成object    或者其他可空参数。页面上就取不到值。。

把传入的id   return  content    id.Tostring()的话页面弹出      space.php     

来大神帮看看。。  

回答好的话追加分。高分。。

cctv男人的主页 cctv男人 | 初学一级 | 园豆:112
提问于:2014-03-24 11:23
< >
分享
最佳答案
0

Details(int? id)

收获园豆:60
Launcher | 高人七级 |园豆:45050 | 2014-03-24 11:42

这个我用过。不过穿过来的值是空的。这里获取不到值。。是还有其他的地方的原因么?

cctv男人 | 园豆:112 (初学一级) | 2014-03-24 11:44

@cctv男人: 你的路由配置有问题。

Launcher | 园豆:45050 (高人七级) | 2014-03-24 11:50

@Launcher: 其他的页面都没问题。。登陆   列表查询都可以显示,只有这个传单个id出现问题

cctv男人 | 园豆:112 (初学一级) | 2014-03-24 11:51

@cctv男人: 你其它页面有类似这种传单个参数的场景吗?

Launcher | 园豆:45050 (高人七级) | 2014-03-24 13:10

@Launcher: 网站所有的 传单个id 接收的页面都有这样的错误。。查询列表都正常的,登陆页正常。

cctv男人 | 园豆:112 (初学一级) | 2014-03-24 13:11

@cctv男人: 检查下你的路由配置,以及你是否增加了额外的 Fiter 之类的。

Launcher | 园豆:45050 (高人七级) | 2014-03-24 13:28

@Launcher: 没有Fiter的存在。没有更改过。都是原来生成的。

cctv男人 | 园豆:112 (初学一级) | 2014-03-24 13:31

@cctv男人: 那就奇怪了哈~要不你重新装一次 MVC3。

Launcher | 园豆:45050 (高人七级) | 2014-03-24 14:50

@Launcher: 嗯。愁死我了、、、、、

cctv男人 | 园豆:112 (初学一级) | 2014-03-24 14:52

@cctv男人: 我仔细读了下你的错误,错误的主要原因是 Details(Int32) 方法需要一个不能为空的 Int32 类型的参数值,但是传入的参数的值是空。因此,你修改为 Details(Int32?) 后,观察到 id 的值为空,这正好印证了此错误提示的问题——即 Uri: http://xxxxxxxx/AdminUser/Details/52 中最后一个路径“52”没有被解析出来并保存到参数字典中。

 

因此,你需要检查下路由匹配规则,还有你本地部署时访问的 URI 是什么样子的,是不是同部署在云中访问时的路径一致。

Launcher | 园豆:45050 (高人七级) | 2014-03-24 15:01

@Launcher: 路径都是一样的。能加下你qq细说下么?

cctv男人 | 园豆:112 (初学一级) | 2014-03-24 15:07

@cctv男人: 没啥可细说的,我只是想到什么就问一下。你这样测试下,Details(string) ,然后输入 URI:http://xxxxxxxxxx/AdminUser/Details/cctv

Launcher | 园豆:45050 (高人七级) | 2014-03-24 15:46

@Launcher: 

此操作的参数类型“Edm.Int32”和“Edm.String”不兼容。 附近 WHERE 谓词, 列 1, 列 64.

说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.Data.EntitySqlException: 此操作的参数类型“Edm.Int32”和“Edm.String”不兼容。 附近 WHERE 谓词, 列 1, 列 64.

源错误: 

行 41: public ActionResult Details(string id) 行 42: { 行 43: User user = db.Users.Find(id); 行 44: return View(user); 行 45: }

出现这样。。

cctv男人 | 园豆:112 (初学一级) | 2014-03-24 15:57

@cctv男人: 怪我,没有说清楚这么改的意义,我是想测试,是否是因为输入的是数字造成值丢失的情况。

public ActionResult Details(string id)

{

    User user = db.Users.Find(id == null ? 53 : 54); 

     return View(user);

}

 

通过 http://xxxxxxxxxx/AdminUser/Details/cctv 访问时,看下 id 是否是 cctv。

Launcher | 园豆:45050 (高人七级) | 2014-03-24 16:03

@Launcher: 按照你说的我弄了下。。部分的详细信息页面解决了。。不过有些页面接收类型需要是int的。。还是不行。。页面上包含的数据 挺多的还是有些页面弄不了。。还有其他的弄法么?

cctv男人 | 园豆:112 (初学一级) | 2014-03-24 16:39

@cctv男人: 我还是没讲清楚啊!如果这么访问: http://xxxxxxxxxx/AdminUser/Details/cctv,id 的值是 cctv 吗?如果是的话,你再这样访问: http://xxxxxxxxxx/AdminUser/Details/53,id 的值是 53 吗?

Launcher | 园豆:45050 (高人七级) | 2014-03-24 16:48

@Launcher: 返回的值不是相对应的53那列。   User user = db.Users.Find(id ==null?53:54);这样写的话 永久的返回  54那列的值。。

cctv男人 | 园豆:112 (初学一级) | 2014-03-24 17:10

@Launcher:  http://xxxxxxxxxx/AdminUser/Details/53,id的值不是53

cctv男人 | 园豆:112 (初学一级) | 2014-03-24 17:14

@cctv男人:  那就是说 id 还是空的嘛,uri 上是不是数字没关系。你在 AdminUserController 中 override OnActionExecuting 方法,通过 ActionExecutingContext filterContext 观察下 ActionParameters ,request uri 之类的值。

Launcher | 园豆:45050 (高人七级) | 2014-03-24 17:20

@Launcher: 好的 。我弄下看看

cctv男人 | 园豆:112 (初学一级) | 2014-03-24 17:21

@cctv男人: 你知道你现在要搞清楚的是什么吗?就是你 uri 最后的那部分路径在服务器解析的时候被过滤掉了,所以你所有 Controller 上的方法的 Action 都没有输入参数的值。也就是说路由规则是 "{controller}/{action}/{id}",但是最后一个参数 {id} 没有解析或解析出来后给扔掉了。

Launcher | 园豆:45050 (高人七级) | 2014-03-24 17:25

@Launcher: 是的。

public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
);

}

protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();

RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
} 这里是本地 路由。。

cctv男人 | 园豆:112 (初学一级) | 2014-03-25 10:01

@cctv男人: 我跟你说的 override  OnActionExecuting ,你没做吧!就是这个样子:

public class AdminUserController

{

 

        protected override void OnActionExecuting(ActionExecutingContext filterContext)         {            

if (filterContext.ActionParameters.ContainsKey("id"))            

{                

Uri requestUri = filterContext.HttpContext.Request.Url;      // 这里应该是:xxxxx/Adminuser/Details/53          

object obj = filterContext.ActionParameters["id"];             // 这里应该是 53

}

    base.OnActionExecuting(filterContext);        

}

}

Launcher | 园豆:45050 (高人七级) | 2014-03-25 10:40
其他回答(4)
0

mvc把53当成int32类型,你因为是object所以需要传入一个引用类型.int32是值类型.换一个类型吧

收获园豆:20
吴瑞祥 | 园豆:29449 (高人七级) | 2014-03-24 11:41

换过的不过都不好用  string  int  int?  都用过的。

支持(0) 反对(0) cctv男人 | 园豆:112 (初学一级) | 2014-03-24 11:44
0

问问阿里技术人员

[秦时明月] | 园豆:738 (小虾三级) | 2014-03-24 13:00
0

弱弱的问一下,这种传参方式是不是MVC特有的?我没见过,所以想知道这种和“../Details?id=53” 的效果是一样的么?

收获园豆:10
zjruan | 园豆:219 (菜鸟二级) | 2014-03-24 13:40

不是啊。不过mvc 是这样传参的。效果一样的。都是传个id

支持(0) 反对(0) cctv男人 | 园豆:112 (初学一级) | 2014-03-24 13:44
0

路由配置 贴出来 然后 控制器的方法参数名也贴下

收获园豆:10
dotNET界面-大白 | 园豆:234 (菜鸟二级) | 2014-03-25 09:55

public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
);

}

protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();

RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
}

路由

public ActionResult Edit(int id)
{
User user = db.Users.Find(id);
return View(user);
}  控制器

支持(0) 反对(0) cctv男人 | 园豆:112 (初学一级) | 2014-03-25 09:59

@cctv男人: 那你应该是   控制器/Edit/52   这样的url路径啊

支持(0) 反对(0) dotNET界面-大白 | 园豆:234 (菜鸟二级) | 2014-03-25 10:01
支持(1) 反对(0) cctv男人 | 园豆:112 (初学一级) | 2014-03-25 10:03

@cctv男人: RouteDebugger

支持(0) 反对(0) dotNET界面-大白 | 园豆:234 (菜鸟二级) | 2014-03-25 10:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册