在我正在创建的网络应用中,我有一个客户列表。每个客户都有一个项目子列表。
这是我的客户端型号:
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
并在其中填入一个值吗?
任何帮助都将不胜感激。
答案 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)
这就是我解释你的问题的方法:
这是对的吗?
如果是这样,您有几个选择。如果您已将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值的任何内容。)