小编Joe*_*pka的帖子

ASP.NET MVC中的状态管理

我前段时间已经构建了一个ASP.NET MVC应用程序,经过几个维护周期后,我想知道我是否采用了最佳的状态管理方法.一切正常,但我觉得有更好的方法.

该网站基于搜索功能,有很多选项.用户通过填写​​表单中的多个搜索选项并单击"搜索"按钮来开始使用该站点.此按钮发布到Search方法,所有搜索选项都被定义为Search方法的参数,例如:

public ActionResult Search(string param1, string param2, string param3, int? param3, long? param4)
Run Code Online (Sandbox Code Playgroud)

现在显示的结果页面上有许多链接,导致各种详细信息页面等.由于我需要在详细信息页面上保留搜索状态,我发现自己创建了ActionLinks,其中包含大量参数, 如:

<%=Html.ActionLink("LinkText", "MethodName", new {id="idOfDetailPage", param1=Model.param1, param2=Model.param2, param3=Model.param3, param4=Model.param4}, null)%>
Run Code Online (Sandbox Code Playgroud)

每个链接中的大多数参数值都不会从搜索的当前状态发生变化,但我需要传递它们才能在详细信息页面中使用当前搜索参数创建其他链接,例如"返回搜索"结果"例如.

当我因新功能请求而需要添加搜索参数时,我发现自己修改了许多链接以及链接所导致的任何Controller方法.这是我觉得我需要更好的方式.

我曾考虑使用会话状态来保存搜索参数,但出于某种原因认为这不是在ASP MVC中使用的最好的东西,所以很好奇是否有另一种更清洁的方法来执行此操作.

注意:我还尝试了一种方法,我在ActionLink中使用强类型对象,但我仍然需要将参数传递给该对象,因此它不会变得更好.

任何想法都表示赞赏.

asp.net asp.net-mvc

7
推荐指数
1
解决办法
7175
查看次数

MVC 4 Web API中的默认参数值

我很好奇为什么ApiController处理操作的默认参数值与"常规"控制器不同.

这段代码工作正常,请求/ Test表示页面获取值1

public class TestController : Controller
{
    public ActionResult Index(int page = 1)
    {
        return View(page);
    }
}
Run Code Online (Sandbox Code Playgroud)

当请求/ api/Values时,此代码不起作用.它失败了:

"参数字典包含非可空类型'System.Int32'的参数'page'的空条目,用于方法'System.Collections.Generic.IEnumerable`1 [System.String]'MvcApplication1.Controllers中的Get(Int32)' .Controllers.ValuesController'.可选参数必须是引用类型,可空类型,或者声明为可选参数."

public class ValuesController : ApiController
{
    public IEnumerable<string> Get(int page = 1)
    {
        return new string[] { page.ToString() };
    }      
}
Run Code Online (Sandbox Code Playgroud)

有关为何的原因的任何提示?

asp.net-mvc-4 asp.net-web-api

5
推荐指数
1
解决办法
4723
查看次数