具体的なビューであるaspページにテキストボックスがあります。ユーザーは2000文字の文字列を入力します。保存ボタンを押すと、この値がデータベースに保存されます。ページを保存した後、入力した値がラベルとして表示される別のページにリダイレクトされました。私は、テキストボックスの値をセッションに保存していました。 MVPで使用しているときにどのように処理すればよいですか?MVPでのセッション管理 - 簡略化された例
1)TextInputPageのMVP概念を使用してセッションの値を設定するにはどうすればよいですか?
2)MVP概念を使用してセッションから読み込んだ後、結果をラベルに表示するにはどうすればよいですか?
注:セッションに値を追加する前に、処理(テキストが追加されています)があります。
別の投稿を指すのではなく、コードの例で答えることができれば素晴らしいと思います。これは、新しい人が学ぶためのもっとも簡単な例です(私は思う:-))。
using System;
namespace ViewInterfaces
{
public interface ITextView
{
string InputtedText { get; }
event EventHandler ButtonClickedEvent;
}
}
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtInput" runat="server"></asp:TextBox>
<asp:Button ID="btnGoToResult" runat="server" Text="Go To Result"
onclick="btnGoToResult_Click" />
</div>
</form>
using System;
using ViewInterfaces;
using Presenter;
using Model;
public partial class TextInputPage : System.Web.UI.Page, ITextView
{
public event EventHandler ButtonClickedEvent;
private TextPresenter listPresenter;
protected void Page_Load(object sender, EventArgs e)
{
TextModel modelController = new TextModel();
listPresenter = new TextPresenter(this, modelController);
this.listPresenter.OnViewLoaded();
}
public string InputtedText
{
get
{
return txtInput.Text;
}
}
protected void btnGoToResult_Click(object sender, EventArgs e)
{
if (ButtonClickedEvent != null)
{
//Riase the event
ButtonClickedEvent(this, e);
}
//Session does not use any MVP now.
if (txtInput.Text.Length > 0 && txtInput.Text.Length <= 100)
{
Session["TextInput"] = "1-100 "+txtInput.Text;
}
else if (txtInput.Text.Length > 100 && txtInput.Text.Length <= 1000)
{
Session["TextInput"] = "101-1000" + txtInput.Text;
}
else
{
Session["TextInput"] = "1001 - 2000" + txtInput.Text;
}
//Redircting currenlty does not use any MVP concept
Response.Redirect("/SessionTestWebSite/ResultOutputPage.aspx");
}
}
<form id="form1" runat="server">
<div>
<asp:Label ID="lblResult" runat="server" Text="Label"></asp:Label>
</div>
</form>
using System;
public partial class ResultOutputPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Does not use MVP now
lblResult.Text = (string) Session["TextInput"];
}
}
using System;
using ViewInterfaces;
using Model;
namespace Presenter
{
public class TextPresenter
{
private ITextView viewObj;
private TextModel contactsModelController;
public TextPresenter(ITextView view, TextModel controller)
{
viewObj = view;
contactsModelController = controller;
}
//Presenter Method
public virtual void OnViewLoaded()
{
//Event subscription
viewObj.ButtonClickedEvent += new EventHandler(DetailView_EditClicked);
}
void DetailView_EditClicked(object sender, EventArgs e)
{
//Calling Model's Functionality
contactsModelController.StoreText(viewObj.InputtedText);
}
}
}
namespace Model
{
public class TextModel
{
public void StoreText(string inputString)
{
//Store to database
}
}
}
参考文献: mvp session response request
ちょっと質問:ASP.Net MVCパターンに移行するのはなぜですか?このメリットは、コードの学習と変更に対する投資を返済します。 –
私はMVPを最初に学びたいです(:-))Morover、私たちの現在のプロジェクトはMVPを使用しています。契約上の問題のためMVCに変更する可能性はありません。 – Lijo
MVPは多くの摩擦と「セレモニーコード」を持っていますが、MVPパターンはWebアプリケーションに完全に対応しています。さらに、ページが高速に実行され、テスト容易性がはるかに容易になります。 アップグレードパスは、ソリューションにMVCセクションを追加する可能性があります。それはaspxページと並んで動作できます。私はオフトピックになるつもりです:-) –