ASP.Net MVC的action方法中缺少URL参数值

时间:2012-11-09 07:20:25

标签: jquery asp.net-mvc-3 url asp.net-mvc-routing

我想将textarea值和一些其他参数传递给action方法。所以我用以下方式使用jquery。

查看: -

@Html.TextArea("aboutme")
<a id="@Profile.Id" title="@Profile.name" onclick="SubmitProfile(this)" >
 Submit</a>

Jquery方法: -

function SubmitReview(e,count) {    
    var Text = "'"+jQuery("#aboutme").val()+"'";
    var url = 'http://' + window.location.host + '/Controller/ActionMethod?' + 'id=' + e.id       + '&name=' + e.title + '&aboutme=' + Text;
    jQuery("#Profile").load(url);

}

行动方法: -

public ActionResult ActionMethod(string id,string name,string aboutme)
        {
            //
        }

上面的代码工作正常,但是当参数值中的任何一个包含空格时。在Jquery方法中,URL看起来很好。但是在action方法中,它将值修剪到第1个空格,其余参数为null。

让我用一些例子来解释

让我们说id ='123',name ='amith cho',aboutme ='我是软件engg'

Jquery方法中的Url

url='http://localhost/Controller/ActionMethod?id=123&name=amith cho ,aboutme=i am software engg'

但它正在采取行动方式id=123 name=amith aboutme=null

如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

如果要将输入的值作为查询参数传递,则应该对输入值进行url编码。

function SubmitReview(e,count) {
    var Text = jQuery("#aboutme").val(); // quotes aren't necessary
    var url = 'http://' + window.location.host + '/Controller/ActionMethod?' 
                   + 'id=' + e.id 
                   + '&name=' + encodeURIComponent(e.title) 
                   + '&aboutme=' + encodeURIComponent(Text); 
    jQuery("#Profile").load(url);

}

如果您的字符串包含不由encodeURIComponent处理的额外字符,您可以尝试使用MDN docs引用的此函数。用对此的调用替换上面对encodeURIComponent的调用。

function fixedEncodeURIComponent (str) {
  return encodeURIComponent(str).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");
}