MVC - 从ViewData手动设置表单提交值

时间:2013-07-30 21:51:33

标签: asp.net-mvc asp.net-mvc-4

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

这是我的客户端型号:

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并在其中填入一个值吗?

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

您只需添加隐藏字段即可。我不知道你将如何在VB中做到这一点,但在C#中它会是这样的:

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

@Html.HiddenFor(x => ViewData["ClientID"])

答案 1 :(得分:1)

好吧 - 我找到了我想要的东西。我一直在寻找@Html.Hidden("ClientID", ViewData("key")),它将给定的ViewData值作为ClientID字段提交给表单。

答案 2 :(得分:0)

这就是我解释你的问题的方法:

  • 您所在的页面上的模型已绑定到您的ppProject类
  • 您在某个地方有一个ClientID,并且您想知道将它放在表单上的哪个位置以便......
  • 您希望表单提交包含ClientID,以便您可以将ppProject与客户关联。

这是对的吗?

如果是这样,您有几个选择。如果您已将ViewID包含在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值的任何内容。)