我正在尝试将一个值从我的视图传递给我的控制器:
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
我将获得任何帮助
祝你好运
答案 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