2011-11-04 20 views
1

jquery datepickerウィジェットでasp.net mvc3を使用しています。私は、ユーザーが日付をクリックし、その日付のURLに移動したい。例えば。 http://mysite.com/home/index/20111231jquery datepicker goto相対日付のURL

私は類似した投稿を見つけましたが、それは相対URLには向いていません。 jQuery UI Datepicker go to date URL

私のコードは最初のクリックでは動作しますが、2回目のクリックでURLが2倍になり、404エラーが発生しました。 第一クリック:http://mysite.com/home/index/20111231 第二クリック:ビューでhttp://mysite.com/home/index/home/index/20111231

コード:コントローラで

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#datepicker").datepicker({ 
      beforeShowDay: function (date) { 
       return [true, "active"]; 
      }, 
      onSelect: function (dateText, inst) { 
       document.location.href = "Home/Index/" + dateText; 
      }, 
      onChangeMonthYear: function(year, month, inst) 
      { 
      }, 
      dateFormat: "yymd", 
      showOtherMonths: true, 
      selectOtherMonths: true, 
      changeMonth: true 
     }); 
    }); 
</script> 
<h2>@ViewBag.Message</h2> 
<div id="datepicker"> 
</div> 

コード:

public class HomeController : Controller 
{ 
    public ActionResult About() 
    { 
     return View(); 
    } 

    public ActionResult Index(string id) 
    { 
     ViewBag.Message = "Welcome " + id; 

     return View(); 
    } 
} 

UPDATED: 私のソリューションは、仮想パスを上生成することですサーバーとそれをクライアントhtmlに貼り付けます。

document.location.href = '@Request.Url.GetLeftPart(UriPartial.Authority)@HttpRuntime.AppDomainAppVirtualPath' + "/Home/Index/" + dateText; 

答えて

1

あなたは、パスの先頭に/を追加する必要があります。

document.location.href = "/home/Index/" + dateText;

+0

先頭に「/」を追加しようとしましたが、仮想ディレクトリ名もハードコードする必要があります。それは良い解決策ではありません。しかし、あなたは私がサーバー上の仮想ディレクトリを取得し、それをクライアントhtmlに貼り付けることができたことを思い出しました。解決方法の更新を参照してください。 –

1

私はURLを構築するURLヘルパーを使用することをお勧めします。このようにしても、ルートを変更した後でも動作します。

@Url.Action("Index", "Home", new { id = dateText }) 
+0

それはほとんど働いたが、dateTextはJavaScriptであり、C#コードではありません。だから私はコンパイルエラーを取得します。 –

+1

ああ、私は、URLヘルパーがURLを作成して、それをjavascriptで解析するように強制することができます。 var url = '@ Url.Action( "Index"、 "Home"、new {id = 0})'; url = url.substr(0、url.length - 1)+ dateText; document.location.href = url; –

+0

あなたは正しいです - JavaScriptを使用してビルドすれば、より難しいです。私は解析のアプローチが適切な回避策だと思う。 – Marc

関連する問題