C# MVP中的会话管理-简化示例
我在asp页面中有一个文本框,它是一个具体的视图。用户输入2000个字符长的字符串。按下“保存”按钮时,此值将保存到数据库中。保存页面后,我重定向到另一个页面,其中输入的值显示为标签。我曾经在会话中存储文本框的值。当我在MVP中使用它时,我如何处理它 1) 如何在TextInputPage中使用MVP概念设置会话的值 2) 如何在使用MVP概念读取会话后在标签中显示结果 注意:在向会话添加值之前,需要进行一些处理(文本追加) 如果您能用代码示例而不是指向另一篇文章来回答,那就太好了。对于新手来说,这是最简单的例子(我认为:-)C# MVP中的会话管理-简化示例,c#,asp.net,.net,webforms,mvp,C#,Asp.net,.net,Webforms,Mvp,我在asp页面中有一个文本框,它是一个具体的视图。用户输入2000个字符长的字符串。按下“保存”按钮时,此值将保存到数据库中。保存页面后,我重定向到另一个页面,其中输入的值显示为标签。我曾经在会话中存储文本框的值。当我在MVP中使用它时,我如何处理它 1) 如何在TextInputPage中使用MVP概念设置会话的值 2) 如何在使用MVP概念读取会话后在标签中显示结果 注意:在向会话添加值之前,需要进行一些处理(文本追加) 如果您能用代码示例而不是指向另一篇文章来回答,那就太好了。对于新手来说
using System;
namespace ViewInterfaces
{
public interface ITextView
{
string InputtedText { get; }
event EventHandler ButtonClickedEvent;
}
}
}
}
参考资料:
我通常使用下一种方式:
public interface ITextView
{
string InputtedText { get; }
string SessionTextEntry { get; set; }
void RedirectToTestPage();
event EventHandler ButtonClickedEvent;
}
查看实现:
public partial class TextInputPage : System.Web.UI.Page, ITextView
{
...
public string SessionTextEntry
{
get { return (string)Session["TextInput"]; }
set { Session["TextInput"] = value; }
}
public void RedirectToTestPage()
{
Response.Redirect("/SessionTestWebSite/ResultOutputPage.aspx");
}
...
}
演示者:
public class TextPresenter
{
...
void DetailView_EditClicked(object sender, EventArgs e)
{
//Calling Model's Functionality
contactsModelController.StoreText(viewObj.InputtedText);
// Save to session and redirect
viewObj.SessionTextEntry = GetTextForSession(viewObj.InputtedText);
viewObj.RedirectToTestPage();
}
// data processing logic
private string GetTextForSession(string inputtedText)
{
if (inputtedText.Length > 0 && inputtedText.Length <= 100)
return "1-100 " + inputtedText;
if (inputtedText.Length > 100 && inputtedText.Length <= 1000)
return "101-1000" + inputtedText;
return "1001 - 2000" + inputtedText;
}
...
}
公共类TextPresenter
{
...
void DetailView\u EditClicked(对象发送方,事件参数e)
{
//调用模型的功能
contactsModelController.StoreText(viewObj.InputedText);
//保存到会话并重定向
viewObj.SessionExtentry=GetTextForSession(viewObj.InputedText);
viewObj.RedirectToTestPage();
}
//数据处理逻辑
私有字符串GetTextForSession(字符串InputedText)
{
如果(输入文本)长度>0 & &输入文本长度100和输入文本。长度只是一个问题:为什么不考虑移动到ASP.NET MVC模式?好处将回报你在学习和修改代码方面的投资。我想学习MVP((-))此外,我们当前的项目正在使用MVP。由于合同问题,不可能将其更改为MVC。我明白了,请尽快尝试切换。MVC模式非常适合web应用程序,而MVP有很多摩擦和“仪式代码”。此外,页面运行速度更快,可测试性更容易。也许升级路径可以将MVC部分添加到您的解决方案中。它可以与aspx页面并排工作。现在我停止,因为我要脱离主题:-)
namespace Model
{
public class TextModel
{
public void StoreText(string inputString)
{
//Store to database
}
}
public interface ITextView
{
string InputtedText { get; }
string SessionTextEntry { get; set; }
void RedirectToTestPage();
event EventHandler ButtonClickedEvent;
}
public partial class TextInputPage : System.Web.UI.Page, ITextView
{
...
public string SessionTextEntry
{
get { return (string)Session["TextInput"]; }
set { Session["TextInput"] = value; }
}
public void RedirectToTestPage()
{
Response.Redirect("/SessionTestWebSite/ResultOutputPage.aspx");
}
...
}
public class TextPresenter
{
...
void DetailView_EditClicked(object sender, EventArgs e)
{
//Calling Model's Functionality
contactsModelController.StoreText(viewObj.InputtedText);
// Save to session and redirect
viewObj.SessionTextEntry = GetTextForSession(viewObj.InputtedText);
viewObj.RedirectToTestPage();
}
// data processing logic
private string GetTextForSession(string inputtedText)
{
if (inputtedText.Length > 0 && inputtedText.Length <= 100)
return "1-100 " + inputtedText;
if (inputtedText.Length > 100 && inputtedText.Length <= 1000)
return "101-1000" + inputtedText;
return "1001 - 2000" + inputtedText;
}
...
}