将viewbag值分配给模型项会导致mvc4出错

时间:2014-08-11 20:59:42

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我正在尝试将一个值从我的视图传递给我的控制器:

 public ActionResult Create(int id)
        {
            ViewBag.ConferenceRegesterId = id;

            return View();
        }

正如您在create操作中所看到的,我将我的ID保存在viewbag。我需要在回帖中使用此ID,所以我有这个回发代码:

  [HttpPost]
        public ActionResult Creat(MvcConference.Models.Details1 ObjDetails)
        {

            dbcontext.Details1.Add(ObjDetails);
            dbcontext.SaveChanges();
            List<MvcConference.Models.Details1> lstuser = dbcontext.Details1.ToList();
            return View("Index");

        }

我使用此代码将我的viewbag值分配给我的create视图

中的模型项
            @Html.HiddenFor(model => model.ConferenceRegesterId=ViewBag.ConferenceRegesterId)

但最后在执行后我收到了这个错误:

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: CS1963: An expression tree may not contain a dynamic operation

我将获得任何帮助

祝你好运

2 个答案:

答案 0 :(得分:1)

您不能像在目前的方式那样在视图中(通过viewbag)为模型的属性赋值,因为您不是在创建类的实例。请注意,只有绑定到输入元素的值才会回发到控制器。

略微改变程序当前的行为方式。控制器中的create操作将为您的viewmodel创建一个实例,并初始化所需的成员(ConferenceRegesterId)。此模型将与create视图紧密绑定。

 public ActionResult Create(int id)
 {
     MvcConference.Models.Details1 viewmodel = new MvcConference.Models.Details1(); 
     viewmodel.ConferenceRegesterId  = id;
     return View(viewmodel);
 }

您的create视图

@model MvcConference.Models.Details1
@using (Html.BeginForm())
{
  ......

  @Html.HiddenFor(model => model.ConferenceRegesterId)
}

现在ObjDetails POST行动中的ConferenceRegesterId可以访问您通过隐藏字段输入元素传递的{{1}}值。

答案 1 :(得分:0)

您不需要任何型号。这是一个简单的问题。使用ViewBag时,必须将该对象转换为Razor View上的静态对象。

喜欢那样;

@{ 
   string varName = ViewBag.varName;
}

你不会再看到那个;

Compiler Error Message: CS1963: An expression tree may not contain a dynamic operation