在两个操作之间保留值会导致一个控制器

时间:2011-12-27 16:37:11

标签: asp.net-mvc asp.net-mvc-2 controller

我在控制器的一个动作方法中生成值。如何在同一控制器的另一个操作结果中使用相同的变量值?

例如:

控制器A - 行动结果1:

 public ActionResult CalculationsONE()
{       
        dynamic CalcModel = new ExpandoObject();
        int var1 = //Value calculated here
        int var2 = //Calculation

        CalcModel.Var1= var1;
        CalcModel.Var2= var2;

        return View(CalcModel);

}

控制器A - 行动结果2:

  public ActionResult CalculationsTWO()
{       
   // I want to use var1 and var2 from the CalculationsONE in 
     this action result

 }

3 个答案:

答案 0 :(得分:4)

只需将它们作为查询字符串参数传递:

public ActionResult CalculationsTWO(int var1, int var2)
{       
    ...
}

并且为了在CalculationsTWO操作中呈现的视图中调用CalculationsONE操作,您可以生成如下链接:

@model CalcModel
@Html.ActionLink(
    "call calculations2", 
    "calculationstwo", 
    "somecontroller" 
    new { 
        var1 = Model.Var1, 
        var2 = Model.Var2 
    }
)

哦,我建议您使用强类型视图模型而不是传递给视图的动态对象。 ViewBag是动态的,但老实说,使用视图模型。你会更快乐: - )

答案 1 :(得分:0)

如果它们是两个单独的动作,那么来自Darin Dimitrov的上述答案应该这样做,否则如果你想在一个资源调用中同时创建两个私有方法在你的控制器中创建calc1和calc2并将结果返回到视图...

results: {
   calc1: ....
   calc2: ....
}

您可以像目前一样使用类变量跟踪值。

答案 2 :(得分:0)

作为替代方案,我会将变量保存到会话中。

EG:

this.Session["variable"]


this.HttpContext.Session["variable"]

或通过ViewData [“string”]将它们传递到视图中,并在Request.FormData [“VariableName”]上的Controller中将它们绑定回来

另一种方式是 将数据添加到视图的模型中 并在控制器的回发中将模型绑定回变量

例如:

// postback action
public ActionResult RebindMethod(ModelToUse rebindToMyModel){

}

模型定义是:

public class ModelToUse{
    public string MyVariableToPersist{get;set;}
}