2012-03-25 4 views
0

こんにちは、私はnhibibernateを使用してMVCでアプリケーションを開発しています。 質問回答フォーラムです。最初のページに質問のリストがリンクとして表示されます。リンクをクリックすると、回答ページに移動して、特定の質問の回答が表示されます。私は、次のフィールドMVC3のアクションの投稿まで変数内の値を保持するには

で2つのテーブルを持っている

質問表:

QuestionID int 
Question nvarchar(255) 
Created_Date datetime 
Modified_Date datetime 
Created_By int 
Modified_By int 
Deleted nchar(1) 

回答表:

AnswerId int 
Answer nvarchar(255) 
Created_Date datetime 
Modified_Date datetime 
Created_By int 
Modified_By int 
QuestionID int (foreign key) 
Deleted nchar(1) 

これは私がしようとしたものです: インサイドQuestionPage.cshtml

@using (Html.BeginForm("Question_Page","QuestionAnswer",FormMethod.Post)) 
{ 
@Html.ValidationSummary(true) 
<ul> 
@foreach (var item in Model) 
{ 
    <li>@Html.ActionLink(item.Question, "Answer_Page", new { Id = item.QuestionID, Question = item.Question })</li> 
} 
    </ul> 

<br /> 
<h2><label for="PostyourQuestion:">Post your Question:</label></h2> 
@Html.TextArea("PostyourQuestion")  
<br /><br /> 
<input type="submit"/> 

}

01コントローラ内部の

public ActionResult Answer_Page(int Id, string Question) 
    { 
     var model = new AnswerService().GetAllAnswers(); 
     ViewBag.Question = Question; 
     model = (from x in model 
       where x.QuestionID.Equals(Id) 
       select x).ToList(); 

     return View(model); 
    } 
    [HttpPost] 
    public ActionResult Answer_Page(Answers ans, string PostyourAnswer, int Id,string Question) 
    { 
     ViewBag.Question =Question; 
     ans.Answer = PostyourAnswer; 
     ans.CreatedDate = DateTime.Now; 
     ans.ModifiedDate = DateTime.Now; 
     ans.CreatedBy = 101; 
     ans.ModifiedBy = 101; 
     ans.FkQuestionID= Id; 
     if (ModelState.IsValid) 
     { 
      new AnswerService().SaveOrUpdateAnswers(ans); 
      var model = new AnswerService().GetAllAnswers(); 
      model = (from x in model 
        where x.QuestionID.Equals(Id) 
        select x).ToList(); 
      return View(model); 
     } 

     return View(); 
    } 

しかし、問題は、私は質問の変数内のNULL値を取得するので、私は、ユーザーがフォームを送信する際のポストに質問を表示することはできませんよOnPostです。

答えて

0

は今、あなたは質問変数にそれを得ることができるはず

@Html.ActionLink(item.Question, "Answer_Page","QuestionAnswer", new { @Id = item.QuestionID, @Question = item.Question },null) 

に変更してみてください。.. me.Iは私が愚かなsumthing行方不明です知って助けてください。

私は個人的に質問文字列にあるように質問を渡すことをお勧めしません。クエリ文字列は、私が信じる文字の制限があります。理想的には質問idだけを渡し、あなたの永続的なデータソースを照会することによって、アクションメソッドでquestionオブジェクトを再構築する必要があります。

What is the maximum possible length of a query string?

http://classicasp.aspfaq.com/forms/what-is-the-limit-on-querystring/get/url-parameters.html

+0

こんにちは、4d返信..しかし、私はmvcに新しい行為をすることができます私はどのようにId値に等しい値だけを取得するためにコントローラでクエリを起動することができます – user1274646

+0

ちょっと仲間のthanx 4アイデア。 .i got it..iコントローラ内でクエリを実行し、値をフェッチすることができました。 – user1274646

+0

@ user1274646私はあなたのテーブルを何でも知っていません。メインページのすべての質問を提供するクエリをコピーして、質問ID(QuestionId = id)のwhere条件を追加してください。 – Shyju

0

これを処理する方法はいくつかあります。 IMOの最善の方法は、質問IDをURLにエンコードして、あなたのリポジトリから質問を再度取得することです。より多くのパフォーマンスが必要な場合は、リポジトリにキャッシュを実装するか、リポジトリをラップするレイヤとしてキャッシュを実装します。もう1つの方法は、TempData(本質的にセッション)を使用して、1回の要求サイクルにわたってデータを保持することです。このメソッドにはいくつかの失敗モードがあります。たとえば、ページ上の別のアクションをクリックしてから、戻るボタンを使用しますが、比較的簡単です。あなたはViewBagを使いたくありません。 ViewBagは、補助データを一方向転送としてビューに渡すためのものです。あなたが見つけたように、それは要求サイクルにわたってその価値を保持しません。

FWIW、質問idを両方の方法で使用する必要があります。質問文字列の一部として質問自体を渡さないでください。

関連する問題