如何将值从一个操作传递到另一个在mvc3中具有不同视图的操作

时间:2012-04-18 07:08:22

标签: asp.net-mvc-3 model-view-controller viewbag

您好我正在开发MVC3中的应用程序。 我被困在一个地方。

我的视图中有2个字段,这些字段不属于我的课程。 我只是用它们来填充下拉列表 这两个领域是州和地区。 但我想在另一个视图中显示两个字段的选定值。

我尝试使用ViewBag,但这不起作用,并且给了我Null。

这是在Create get方法中:

int stateid = Convert.ToInt32(formcollection["ProvincialState.ProvincialStateID"]);
int districtid =  Convert.ToInt32(formcollection["District.DistrictID"]);

ProvincialState state = new AddressService().FetchStateByStateId(stateid);
District district = new  AddressService().FetchDistrictByDistrictId(districtid);

ViewBag.State = state.ProvincialStateName;
ViewBag.District = district.DistrictName;

这是在详情视图中:

 string data1 = ViewBag.State;
 string data2 = ViewBag.District;
 ViewBag.State = data1;
 ViewBag.District = data2;

我不能使用创建coz的post方法我只需要在另一个视图上显示此数据。 或者,如果他们是我可以在同一视图中显示数据的任何方法。

2 个答案:

答案 0 :(得分:4)

ViewBag就像ViewData。为了在页面之间获取信息,您应该将该信息存储在会话中。你可以用两种方式做到这一点:

使用会话变量,如:

this.Session["SessionVariable"] = value;

或者使用this.TempData对象:

this.TempData["SessionVariable"] = value;

这两者之间的区别在于TempData对象在读取时会从会话中删除。

TempData只是会话的包装。

答案 1 :(得分:0)

除了模型之外,您还可以将此字段发送到您的操作,然后将其存储在会话中,例如:

public class SomeController: Controller
{
    [HttpPost]
    public ActionResult DoSomething(MyModel model, int state, int district)
    {
        // validating model...
        // ...

        Session["state"] = state;
        Session["district"] = district;
        // some other logic...
    }
}