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' がそのテーブルにありません。必要な場合を除き、1 つの追加フィールドのためだけにモデルを作成したくありません。

これどうやってするの?

4

2 に答える 2

1

私はあなたの質問を誤解しているかもしれませんが、ビューで値を取得し、その値をコントローラーで実行されているコードで利用できるようにしようとしているようです。ビューには、 を介してコントローラーへのハンドルがありViewContext.Controller、これをコントローラーの型にキャストして操作できます。たとえば、コントローラーにプロパティを追加して、ビューから設定することができます。コントローラーの仕事は通常、ビューがレンダリングされるまでに完了しているため、なぜそうするのかわかりませんが、それを追求したい場合はオプションです。

于 2013-07-25T00:23:24.227 に答える
0

ViewModel を作成し、ViewModel に基づいて View を厳密に型指定する必要があります。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 に答える