2017-07-13 20 views
1

私はC#mvcアプリケーションで作業しており、私のアプリケーションでこのjavascriptカレンダーを使用しています:http://fullcalendar.io/。私が見せている出来事は、裁判所審理です。コントローラを継承しないクラスでアクションリンクを作成するにはどうすればよいですか?

var obj = new 
{ 
    id = hearing.id, 
    title = string.Format("Hearing ({0} - {1}) in the case №{2}/{3}", hearing.HearingStart.Value.ToString("H:mm"), hearing.HearingEnd.Value.ToString("H:mm"), hearing.CaseNumber, hearing.CaseYear), 
    start = hearing.HearingStart.Value.ToString("yyyy-MM-dd HH:mm:ss"), 
    end = hearing.HearingEnd.Value.ToString("yyyy-MM-dd HH:mm:ss") 
}; 

方法のこの行で:

title = string.Format("Hearing ({0} - {1}) in the case №{2}/{3}", hearing.HearingStart.Value.ToString("H:mm"), hearing.HearingEnd.Value.ToString("H:mm"), hearing.CaseNumber, hearing.CaseYear) 

は私が指すようにcaseNumber ActionLinkのようにしたい。ここ法廷審問のための書類を作成し、私のサービスのメソッドの一部は、 http://93.152.175.226/Cases/Details/327688

私はgoogleとstackoverflow.comの例を探しましたが、ActionLinkをC#コードで(ビューではなくサービスメソッドで)使用するための正しい構文を示していますが、見つかりませんでした。ここで

は、コントローラのメソッドです: 公共のIEnumerable GetHearingsForJudgePanel(文字列ID、int型の月、int型の年、int型caseNumber、int型caseYear?) { :ここ

public ActionResult GetHearingsForJudgePanel(string id, int? month = null, int? year = null, int? caseNumber = null, int? caseYear = null) 
{ 
    if (!Request.IsAjaxRequest()) 
     return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 

    int currentMonth; 
    int currentYear; 
    DateTime currentDate = DateTime.Now; 
    EventService service = new EventService(); 
    IEnumerable<object> data; 

    if (id == "") 
    { 
     id = null; 
    } 

    if (month.HasValue) 
     currentMonth = month.Value; 
    else 
     currentMonth = currentDate.Month; 

    if (year.HasValue) 
     currentYear = year.Value; 
    else 
     currentYear = currentDate.Year; 

    data = service.GetHearingsForJudgePanel(id, currentMonth, currentYear, caseNumber, caseYear); 

    return Json(data, JsonRequestBehavior.AllowGet); 
} 

は私のサービスメソッドでありますリスト結果=新しいリスト(); リストヒアリング=新しいリスト(); MVCコントローラで

 string constr = System.Configuration.ConfigurationManager.ConnectionStrings["DapperConnection"].ToString(); 

     con = new SqlConnection(constr); 

     hearings = con.Query<HearingsForCalendarViewModel>("GetHearingsForCalendar", new { id, month, year, caseNumber, caseYear }, commandType: CommandType.StoredProcedure).ToList(); 

     const string protocol = "http://"; 
     const string baseAddress = "93.152.175.226"; 
     const string path = "/Cases/Details/"; 

     foreach (var hearing in hearings) 
     { 
      var link = $"<a href=\"{protocol}{baseAddress}{path}{hearing.caseId}\">{he‌​aring.CaseNumber}</a‌​>"; 
       var obj = new 
       { 
        id = hearing.id, 
        title = string.Format("Hearing({0} - {1}) in the case №{2}/{3}", hearing.HearingStart.Value.ToString("H:mm"), hearing.HearingEnd.Value.ToString("H:mm"), link, hearing.CaseYear), 

        start = hearing.HearingStart.Value.ToString("yyyy-MM-dd HH:mm:ss"), 
        end = hearing.HearingEnd.Value.ToString("yyyy-MM-dd HH:mm:ss") 
       }; 

       result.Add(obj); 

     } 

     return result; 
    } 
+0

今後、実際に情報を保持する質問タイトルを書き留めてください。 **ここに質問を投稿する人は、**仕事に助けを必要としない**はありません。明確な問題の説明は、毎日このサイトに洪水を発生させるゴミを選別するのに役立ちます。 =) –

+0

私は質問のタイトルをより有益なものにします – ppetyr

答えて

1

、あなたは、基本クラスSystem.Web.Mvc.ControllerUrlプロパティを使用してUrlHelperへのアクセス権を持っている:リンクがSystem.Web.Mvc.Controllerから継承しないクラスで構築する必要がある場合

var link = Url.Action("Details", "Cases", new { id = caseNumber }); 

(ViewModelやServiceなど)では、現在のRequestContextを渡してを作成できます。

var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext); 
var link = urlHelper.Action("Details", "Cases", new { id = caseNumber }); 

または、コントローラからサービスメソッドにUrlHelperを注入します。

+0

助けてくれてありがとう、サービスクラスの構文を使って "var urlHelper"フィールドを作ったので、 "urlHelper.Action"をうまく使うことができます。私はActionメソッドの10のオーバーロードを読みましたが、実際にどちらを使うべきか、そしてそのアドレスを指し示す "№345"という名前のアクションをどのように構築するかはわかりません。 ://93.152.175.226/Cases/Details/327688 "(" 327688 "はcaseId - hearing.caseIdです)。あなたは私の仕事を終わらせるのを手助けすることができますか(私は正しい方法の構文を要求します)? – ppetyr

+0

以下のトリックが必要です: 'Url.Action($"№{hearing.CaseNumber} "、" Details "、" Cases "、new {caseId = hearing.caseId}、null)'。 –

+0

このアドレス「93.152.175.226/Cases/Details/327688」はインターネット上のサイトのアドレスであり、私のアプリケーションに接続されていないためではありません。アプリケーションに「Cases」コントローラまたは「Cases/Details」ビューはありません。 – ppetyr

関連する問題