0

私が作成している Web アプリには、クライアントのリストがあります。また、各クライアントにはプロジェクトのサブリストがあります。

これは私のクライアントモデルです:

Public Class ppClient
    <Key()>
    Public Property ClientID As Integer
    Public Property Name As String

    Public Overridable Property Projects As ICollection(Of ppProject)
End Class

そして、ここに私のプロジェクトモデルがあります:

Public Class ppProject
    <Key()>
    Public Property ProjectID As Integer
    Public Property ClientID As Integer
    Public Property ProjectTitle As String

    Public Overridable Property Client As ppClient
End Class

私が遭遇している問題は、新しいプロジェクトが作成されているときにフォームの値を手動で追加しようとしていることです。ClientID を ViewData に保存しているので、ユーザーに尋ねたくありません。これは私のビューとフォームの送信です:

ModelType MVCnewDB.ppProject

@Using Html.BeginForm()
    @Html.ValidationSummary(True)

    @* Needs to submit ClientID *@

    Html.EditorFor(Function(model) model.ProjectTitle)
    Html.ValidationMessageFor(Function(model) model.ProjectTitle)
    @<input type="submit" value="Create Project" />
End Using

<div>
    @Html.ActionLink("Back", "Index")
</div>

では、ClientID を ViewData 値として送信するフォームを取得するにはどうすればよいでしょうか。値を呼び出してHtml.HiddenForそれに値を入れることはできますか?

どんな助けでも大歓迎です。

4

3 に答える 3

1

隠しフィールドを追加するだけです。VB でどのように行うかはわかりませんが、C# では次のようになります。

@Html.HiddenFor(x => ViewBag.ClientID)

また

@Html.HiddenFor(x => ViewData["ClientID"])
于 2013-07-30T21:55:06.357 に答える
1

オーケー - 探していたものを見つけました。@Html.Hidden("ClientID", ViewData("key"))指定された ViewData 値を ClientID フィールドとしてフォームに送信するものを探していました。

于 2013-07-30T22:20:07.783 に答える
0

これが私があなたの質問を解釈する方法です:

  • モデルが ppProject クラスにバインドされているページにいます
  • どこかに ClientID があり、それをフォームのどこに置くかを知りたいので...
  • ppProject をクライアントに関連付けることができるように、フォーム送信に ClientID を含める必要があります。

これは正しいです?

その場合、いくつかのオプションがあります。ClientID を ViewBag に含めた場合は、隠しフィールドを使用して値を保存し、送信できます。アクションでは、実際には複数のパラメーターを指定できます。1 つ目は、モデル バインダーがフィールドをバインドする ppProject クラスと、ClientID 値を含む非表示フィールドと同じ名前の別の文字列パラメーターです。パラメータが非表示フィールド名と正確に一致する限り、モデル バインダーは 2 つを一致させ、ClientID を取得します。

(C# では、私の VB.NET スキルはさびすぎて意味がありません:)

public ActionResult NewProject(ppProject projectInfo, string ClientID)
{
  ...
}

上記は、ビューをそのまま維持することを前提としていますが、次のようなものを追加します。

<input type="hidden" name="ClientID" value="@ViewBag.ClientID" />

またはおそらく(単なる推測です!):

Html.HiddenFor(Function(model) ViewBag.ClientID)

これは、ViewBag プロパティ名をコントローラーの ActionResult のパラメーター名と一致させていることを前提としています。(ViewBag を、ClientID 値を格納するために使用しているものに置き換えるだけです。)

于 2013-07-30T22:23:05.560 に答える