0

我有一个包含 c# 和 linq 的视图(不理想,但我必须使用它!):

protected void Page_Load(object sender, EventArgs e)
{
 .
 .
var qry = (from p in db.EntityObject
                       where something == something_else
                       select new
                            {
                                <fields>
                            }).FirstOrDefault();
 .
 .
}
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
.
.

我需要将通过视图中的 linq 语句检索到的值传递给我的控制器。我试过这个:

 var qry = (from <entity objects>       
 select new
                        {
                            id,
                            // fields
                        }).FirstOrDefault();
 RouteData.Values.Add("id", qry.id);

然后我尝试将它作为值传递给隐藏的输入类型:

<input type="hidden" value="<%Int32.Parse(RouteData.Values["id"].ToString())"/>

但是,当我使用 Chrome 的工具查看输入元素时,“值”为空。我不知道如何将视图中从 linq 检索的字段传递给控制器​​中的相应操作。

我的视图是基于实体框架中的表进行强类型化的,而我想要从视图传递到控制器的“id”不在该表中。我不想为一个额外的字段创建一个模型,除非我必须这样做。

我怎样才能做到这一点?

4

2 回答 2

1

我可能误解了您的问题,但看起来您正试图在视图中获取一个值,并使该值可用于在您的控制器中运行的代码。视图通过 具有控制器的句柄ViewContext.Controller,您可以将其转换为控制器的类型,然后与之交互。例如,您可以向控制器添加一个属性,然后从视图中设置它。我不确定你为什么要这样做,因为控制器的工作通常在视图呈现时完成,但如果你想追求它,这是一个选择。

于 2013-07-25T00:23:24.227 回答
0

您应该创建一个 ViewModel,并使您的 View 基于 ViewModel 进行强类型化。您的 ViewModel 可以是这样的:

public class MyViewModel
{
  public MyModel MyModel { get; set; }
  public int Id { get; set; }
}

然后,在您的视图中,您将拥有:

<%: Html.HiddenFor(model => model.Id) %>
于 2013-07-24T02:29:19.370 回答