Asp.net mvc 如何使用Html.BeginForm()传入ID?

Asp.net mvc 如何使用Html.BeginForm()传入ID?,asp.net-mvc,Asp.net Mvc,在中,我正在使用HTML助手 Html.BeginForm("ActionName", "Controller", FormMethod.Post); 但我需要发到:/controller/action/23434 如何传入ID?Html.BeginForm(“操作”、“控制器”,新的{ID=12345})马特的应该可以。但是,如果您仍在传递FormMethod.Post,则需要这样做: Html.BeginForm("action","controller", new { Id = 1234

在中,我正在使用HTML助手

Html.BeginForm("ActionName", "Controller", FormMethod.Post);
但我需要发到:/controller/action/23434


如何传入ID?

Html.BeginForm(“操作”、“控制器”,新的{ID=12345})
马特的应该可以。但是,如果您仍在传递
FormMethod.Post
,则需要这样做:

Html.BeginForm("action","controller", new { Id = 12345 }, FormMethod.Post);
反转第三个和第四个参数将导致
Id
被视为属性,而不是路由值

Html.BeginForm("action", "controller", new { id = ViewBag.FileID },
FormMethod.Post, new { id = "feedbackform" })
至于查询字符串,
?type=golden
,我不知道怎么做。当然,查询是一种获取,它破坏了
FormMethod.Post
的全部用途。我的意思是,如果你想要查询字符串数据,你可以使用
FormMethod.Get
,这可能就是你想要的

此外,您可以避免使用
html.beginform
并使用表单标记手动执行查询字符串get+post

第三,如果您正在使用表单,您可以创建一个隐藏字段:

[input type=hidden name="type" value="golden"]

然后,当按下submit按钮时,该值将作为表单变量正确传递。

检查参数名称routeValues-确保使用的是该参数而不是htmlAttributes。使用此方法时,我将丢失现有的路由值。假设我的url是
/controller/action?type=golden
,表单目标(使用您的方式)现在变成
/controller/action/12345
,而我希望它是
/controller/action/12345?type=golden
。你知道有什么方法可以保留现有的路由值并附加我自己的路由值吗?@Aki尝试在表单中添加
type
作为隐藏字段,它应该会被发送出去。我可以,但你知道这不是我的问题。我的查询字符串中没有必要只有
type
,我可以有N个参数,在不同的操作中可能会有所不同。进入所有这些操作并将查询参数添加为隐藏字段将是一件非常痛苦的事情。