如何设计ASP.NET MVC中高效传递参数的最佳实践方案?
- 内容介绍
- 相关推荐
本文共计1171个文字,预计阅读时间需要5分钟。
在两个视图中传递ASP.net MVC中的参数,可以通过几种方式实现:
1. 使用Session或ViewBag: - Session:将参数存储在Session中,然后在另一个视图中从Session中读取。 - ViewBag:在控制器中设置ViewBag的值,这些值会自动传递到视图中,可以在另一个视图中访问。
2. 使用Route Data: - 在路由配置中定义参数,然后在控制器中通过RouteData获取这些参数。
3. 使用Model: - 将参数作为模型传递给视图,然后在另一个视图中访问这个模型。
最佳做法取决于具体场景和需求:
- Session:适合在多个请求间共享数据,但要注意性能和安全性。- Route Data:适合在控制器动作间传递参数,特别适合于URL路由。- Model:适合在视图间传递数据,是MVC模式中常用的方式。
如果你正在研究将ASPX应用程序迁移到MVC,并遇到困难,以下是一些建议:
- 理解MVC架构:确保你理解MVC中的模型、视图和控制器之间的关系。- 逐步迁移:不要一次性迁移整个应用程序,而是逐步迁移部分功能。- 重构ASPX页面:将ASPX页面中的逻辑移到控制器或模型中。- 使用Visual Studio模板:Visual Studio提供了MVC模板,可以帮助快速创建MVC项目。
在ASPX视图中,避免直接在代码中编写业务逻辑,而是将逻辑移到控制器或模型中。这样可以提高代码的可维护性和可测试性。
如何在两个视图中传递ASP.net MVC中的参数,如向导?或者最佳做法是什么?
我正在研究一个内部错误跟踪ASP.net应用程序被转移到MVC,我似乎无法摆脱我的头脑中的ASPX并进入圈子.
在ASPX应用程序中.
第1页 – >选择Project,在Querystring中传递projectId
第2页 – >选择IssueType,在Querystring中传递projectId和Issuetype
第3页 – >创建新问题,我们可以获得projectId和IssueType形式的查询字符串
我们如何在MVC中重新创建上述流程?
“向导”类型系统的常见做法是使用单个< form>元素,包含隐藏字段中先前屏幕的信息.编辑:根据请求,这是一个例子(我不熟悉ASP.net,所以你必须自己将其翻译成代码:().假设你有一个销售汽车的网站,并在你的订购表格中您询问模型车,并在随后的屏幕中提供适用于该车辆的选项.
<form action="order-wizard.html" method="POST"> <!-- which step of the wizard are we on? --> <input type="hidden" name="step" value="1" /> <!-- Get some info from the user for the first step of the wizard --> <select name="Model"> <option value="Sedan">Sedan</option> <option value="Coup">Coup</option> <option value="Pickup">Pickup</option> <option value="Van">Van</option> </select> <input type="submit" /> </form>
当用户选择模型并提交表单时,order-wizard.html的控制器可以注意到step选项为1,并且知道检查用户是否选择了模型.然后它生成一个这样的页面:(假设用户选择“拾取”)
<form action="order-wizard.html" method="POST"> <!-- which step of the wizard are we on? --> <input type="hidden" name="step" value="2" /> <!-- Stored results from the previous stage of the wizard --> <input type="hidden" name="Model" value="Pickup" /> <!-- Additional information for the wizard. More than one option can be requested for each stage of the wizard. --> <select name="Style"> <option value="Short Bed">Short Bed</option> <option value="Long Bed">Long Bed</option> <option value="Extended Cabin">Extended Cabin</option> <option value="Dually">Dually</option> </select> <select name="Interior"> <option value="Cloth">Cloth</option> <option value="Leather"> Leather </option> </select> <input type="submit" /> </form>
如果向导需要收集更多信息,则可能会以隐藏输入的方式生成其他页面.否则,如果这是最后一页并收集了所有信息,则该页面的代码可以正常处理表单,就像用户在单个页面请求上提供了所有输入一样.
此技术的优点是服务器不需要缓存任何会话信息.另一个优点是它提供了一种RESTful接口,其中来自另一个工具的单个页面请求可以生成表单的所有输入,跳过中间向导页面.
缺点是,由于页面是基于用户请求动态生成的,因此如果客户端碰巧离开页面,则必须重新开始.书签不起作用.它也不会在验证中保存任何内容,因为这种表单输入可能很容易伪造.
本文共计1171个文字,预计阅读时间需要5分钟。
在两个视图中传递ASP.net MVC中的参数,可以通过几种方式实现:
1. 使用Session或ViewBag: - Session:将参数存储在Session中,然后在另一个视图中从Session中读取。 - ViewBag:在控制器中设置ViewBag的值,这些值会自动传递到视图中,可以在另一个视图中访问。
2. 使用Route Data: - 在路由配置中定义参数,然后在控制器中通过RouteData获取这些参数。
3. 使用Model: - 将参数作为模型传递给视图,然后在另一个视图中访问这个模型。
最佳做法取决于具体场景和需求:
- Session:适合在多个请求间共享数据,但要注意性能和安全性。- Route Data:适合在控制器动作间传递参数,特别适合于URL路由。- Model:适合在视图间传递数据,是MVC模式中常用的方式。
如果你正在研究将ASPX应用程序迁移到MVC,并遇到困难,以下是一些建议:
- 理解MVC架构:确保你理解MVC中的模型、视图和控制器之间的关系。- 逐步迁移:不要一次性迁移整个应用程序,而是逐步迁移部分功能。- 重构ASPX页面:将ASPX页面中的逻辑移到控制器或模型中。- 使用Visual Studio模板:Visual Studio提供了MVC模板,可以帮助快速创建MVC项目。
在ASPX视图中,避免直接在代码中编写业务逻辑,而是将逻辑移到控制器或模型中。这样可以提高代码的可维护性和可测试性。
如何在两个视图中传递ASP.net MVC中的参数,如向导?或者最佳做法是什么?
我正在研究一个内部错误跟踪ASP.net应用程序被转移到MVC,我似乎无法摆脱我的头脑中的ASPX并进入圈子.
在ASPX应用程序中.
第1页 – >选择Project,在Querystring中传递projectId
第2页 – >选择IssueType,在Querystring中传递projectId和Issuetype
第3页 – >创建新问题,我们可以获得projectId和IssueType形式的查询字符串
我们如何在MVC中重新创建上述流程?
“向导”类型系统的常见做法是使用单个< form>元素,包含隐藏字段中先前屏幕的信息.编辑:根据请求,这是一个例子(我不熟悉ASP.net,所以你必须自己将其翻译成代码:().假设你有一个销售汽车的网站,并在你的订购表格中您询问模型车,并在随后的屏幕中提供适用于该车辆的选项.
<form action="order-wizard.html" method="POST"> <!-- which step of the wizard are we on? --> <input type="hidden" name="step" value="1" /> <!-- Get some info from the user for the first step of the wizard --> <select name="Model"> <option value="Sedan">Sedan</option> <option value="Coup">Coup</option> <option value="Pickup">Pickup</option> <option value="Van">Van</option> </select> <input type="submit" /> </form>
当用户选择模型并提交表单时,order-wizard.html的控制器可以注意到step选项为1,并且知道检查用户是否选择了模型.然后它生成一个这样的页面:(假设用户选择“拾取”)
<form action="order-wizard.html" method="POST"> <!-- which step of the wizard are we on? --> <input type="hidden" name="step" value="2" /> <!-- Stored results from the previous stage of the wizard --> <input type="hidden" name="Model" value="Pickup" /> <!-- Additional information for the wizard. More than one option can be requested for each stage of the wizard. --> <select name="Style"> <option value="Short Bed">Short Bed</option> <option value="Long Bed">Long Bed</option> <option value="Extended Cabin">Extended Cabin</option> <option value="Dually">Dually</option> </select> <select name="Interior"> <option value="Cloth">Cloth</option> <option value="Leather"> Leather </option> </select> <input type="submit" /> </form>
如果向导需要收集更多信息,则可能会以隐藏输入的方式生成其他页面.否则,如果这是最后一页并收集了所有信息,则该页面的代码可以正常处理表单,就像用户在单个页面请求上提供了所有输入一样.
此技术的优点是服务器不需要缓存任何会话信息.另一个优点是它提供了一种RESTful接口,其中来自另一个工具的单个页面请求可以生成表单的所有输入,跳过中间向导页面.
缺点是,由于页面是基于用户请求动态生成的,因此如果客户端碰巧离开页面,则必须重新开始.书签不起作用.它也不会在验证中保存任何内容,因为这种表单输入可能很容易伪造.

