0

在我正在创建的网络应用程序中,我有一个客户列表。每个客户都有一个项目子列表。

这是我的客户模型:

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,并且您想知道将其放在表单上的哪个位置,以便...
  • 您希望表单提交包含 ClientID,以便您可以将 ppProject 与客户相关联。

这个对吗?

如果是这样,您有几个选择。如果您已将 ClientID 包含在 ViewBag 中,则可以使用隐藏字段来存储值并提交它。在您的操作中,您实际上可以指定多个参数。第一个可以是您希望模型绑定器将字段绑定到的 ppProject 类,以及另一个与包含您的 ClientID 值的隐藏字段同名的字符串参数。只要参数与隐藏字段名称完全匹配,模型绑定器就会将两者匹配起来,您将获得 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 回答