首页 新闻 会员 周边

虚心请教mvc

1
[已解决问题] 解决于 2010-11-04 09:08

//ajax路由

routes.MapRoute(
"NAjax", // Route name
"{controller}/{action}/{name}", // URL with parameters
new { controller = "Comm", action = "Index", name = "" } // Parameter defaults


//contronl
public ActionResult Index(string name)
{

return View();
}

//view
<input name="email" type="text" class="login_logbox_left_text" id="email" onfocus="this.style.borderColor='#FFBA00'" onblur="this.style.borderColor='';check_email(this.value,'check_email')" maxlength="40"/>
//js
function check_user(strname) {
$.ajax({
type:
"POST", //用POST方式传输
// dataType: "html", //数据格式:JSON
url: "../../Comm/Index/", //目标地址。适合ASP.NET MVC
data: strname, //数据
beforeSend: function() { }, //发送数据之前
complete: function() { }, //接收数据完毕
success: function(msg) {
//数据获取完毕,填充页面据显示
if (msg == "err") {
$(
"#check_usname").html("<div class=\"ajaxout_checkfalse\">用户名已经存在或者不合法!</div>");
check_form_username
= false;
}
else {
$(
"#check_usname").html("<div class=\"ajaxout_checkture\"></div>");
check_form_username
= true;
}
}
});
}


问题是在
public ActionResult Index(string name)
{

return View();
}
这里为什么取不到name的值

 

keepsilence的主页 keepsilence | 菜鸟二级 | 园豆:457
提问于:2010-11-03 11:27
< >
分享
最佳答案
0
url: "../../Comm/Index/"
你的URL不就只有Comm这个Controller和Inde这个Action吗,根本没有name啊
url: "../../Comm/Index/" + strname应该才是对的
Gray Zhang | 专家六级 |园豆:17610 | 2010-11-03 11:47
url: "../../Comm/Index/" url: "../../Comm/Index/" + strname 是一样的 在contronl里面取不到
keepsilence | 园豆:457 (菜鸟二级) | 2010-11-03 11:51
1、使用"../../Comm/Index/" + strname后,不要使用data参数 2、看看其他的Route规则,有没有也能适应/xxx/yyy/zzz这样模式的,会导致冲突,比如你又定义了{controller}/{action}/{id}或者有{action}/{id}/{date}这种,都会有冲突
Gray Zhang | 园豆:17610 (专家六级) | 2010-11-03 11:54
如果我用Request.form[0]那么取到的值是name:xxx 但是 public ActionResult Index(string name) { return View(); } 这样上面的name为什么是null
keepsilence | 园豆:457 (菜鸟二级) | 2010-11-03 11:54
嗯我先去看看=我下谢谢
keepsilence | 园豆:457 (菜鸟二级) | 2010-11-03 11:55
routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults ); routes.MapRoute( "Company", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Company", action = "Index", id = "" } // Parameter defaults ); routes.MapRoute( "Register", // Route name "{controller}/{action}/{member_type}", // URL with parameters new { controller = "Account", action = "Index", member_type = "" } // Parameter defaults ); routes.MapRoute( "NAjax", // Route name "{controller}/{action}/{name}", // URL with parameters new { controller = "Comm", action = "Index", name = "" } // Parameter defaults ); 所有的路由配置
keepsilence | 园豆:457 (菜鸟二级) | 2010-11-03 11:58
你每个规则都是冲突的…… 你写规则的方法不对哦,比如Company这个,你应该写 "Company", "Company/{id}", new {controller = "Company", action="Index", id=""} 这样就确定所有不是Company/开头的不会映射到这个规则上,你单纯写{controller}/...会把其他的请求也吸过来 具体再仔细看一下一些示例项目的URL规则吧
Gray Zhang | 园豆:17610 (专家六级) | 2010-11-03 12:07
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }); routes.MapRoute("Register", "Account/Register/{member_type}", new { controller = "Account", action = "Index", member_type = "" }); routes.MapRoute("Company", "Company/{id}", new { controller = "Company", action = "Index", id = "" }); routes.MapRoute("NAjax", "Comm/{name} ", new { controller = "Comm", action = "Index", name = "" }); 我改成怎样可以满足上面的需要了吗 谢谢你的指点
keepsilence | 园豆:457 (菜鸟二级) | 2010-11-03 13:20
你的Default中的{id}是Optional的,那么如果我有这样的形式 Comm/test 那么他是映射到没有{id}的Default这个规则,并且{action}是test呢,还是映射到NAjax穿上规则,{name}是test呢 这里还是有歧义吧……
Gray Zhang | 园豆:17610 (专家六级) | 2010-11-03 13:22
routes.MapRoute("NAjax", "Comm/Index/{name} ", new { controller = "Comm", action = "Index", name = "" }, new {controller=@"Comm" }); 怎样应该可以了吧 不好意思我刚刚在学mvc还没有搞的太清楚 刚刚看了你的提示才明白了一点点 还望多多指教谢谢
keepsilence | 园豆:457 (菜鸟二级) | 2010-11-03 13:48
可以的吧,不过把这一行移到Default前面去应该行,其实MVC我也不熟,不做.NET好久了
Gray Zhang | 园豆:17610 (专家六级) | 2010-11-03 14:07
不管怎样还是谢谢在其中明白了点东西
keepsilence | 园豆:457 (菜鸟二级) | 2010-11-03 14:52
GrayZhang 最近做啥了?强人……
Jaryleely | 园豆:367 (菜鸟二级) | 2010-11-04 10:36
我现在是前端工程师,服务器端的一概只学不用
Gray Zhang | 园豆:17610 (专家六级) | 2010-11-04 10:38
其他回答(2)
0
public ActionResult Index(string name)
{

return View();
}

 

这边的Name 是通过RouteTabe中规则,Url 匹配得到的结果,而你ajax通过Post方式请求,所以你必须通过Reques.Form 获取。

clound | 园豆:481 (菜鸟二级) | 2010-11-03 13:30
我Reques.Form过如果view里面有个标签是 <intput id="name" name="name" type="text"> Reques.Form["name"] 应该可以获取到吧 但是是空的 Reques.Form[0]怎样可以获取到但值是name:xxxx
支持(0) 反对(0) keepsilence | 园豆:457 (菜鸟二级) | 2010-11-03 13:51
这样可以取到,你看看是不是有什么忽略掉的地方.
支持(0) 反对(0) clound | 园豆:481 (菜鸟二级) | 2010-11-04 08:46
0

一楼基本上是正解了。你form里面取不到,可能是你ajax没写好,我不太懂jquery做ajax。

你关键没搞清楚路由原理。我最近在写这方面的随笔,希望对你有帮助。

P_Chou | 园豆:210 (菜鸟二级) | 2010-11-03 14:17
我都已经按顶楼的做了 但是在contronl里面就是取不到值 ajax请求也是正常的我监视到rawurl是comm/index/sdfsdfs 怎样是没有任何问题的吧 但是为什么就是取不到sdfsdfs
支持(0) 反对(0) keepsilence | 园豆:457 (菜鸟二级) | 2010-11-03 14:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册