Url.操作未将参数传递到索引
本文关键字:索引 参数传递 操作 Url | 更新日期: 2023-09-27 18:25:10
在我的控制器中,我有以下代码:
public ActionResult Index(int? videoId, int languageId = 0)
{
//Some code
}
然后在我的.chtml页面中,我这样引用它:
@using (Html.BeginForm("Index", "VideoLanguage", FormMethod.Post))
{
@Html.Hidden("videoId", Model.VideoId)
@Html.Hidden("videoLanguageId", Model.SelectedLanguage.LanguageId)
<div>
@Html.DropDownListFor(model => model.SelectedLanguage.LanguageId, ViewData["LanguageId"] as SelectList)
</div>
<div>
<a href="@Url.Action("Index", "VideoLanguage",new { videoId = Model.VideoId, languageId = Model.SelectedLanguage.LanguageId })" class="linkbutton">Add Language</a>
</div>
... code keeps going
因此,当我单击按钮时,不会传递从下拉列表中选择的LanguageId值。原始值为.
<a href="@Url.Action("Index", "VideoLanguage",new { videoId = Model.VideoId, languageId = Model.SelectedLanguage.LanguageId })" class="linkbutton">Add Language</a>
是在页面加载时设置的,因此HTML中的值将被硬编码。您需要做的是在Javascript中设置超链接参数,或者使用:
<input type="submit" value="Index" />
请参阅MVC 4中如何将文本框值从视图传递到控制器?
试试这个:
@using (Html.BeginForm("Index", "VideoLanguage", FormMethod.Post, new { videoId = Model.VideoId, languageId = Model.SelectedLanguage.LanguageId }))
{
....
}
您应该将参数传递给@Html.BeginForm助手,然后只提交表单
@using (Html.BeginForm("Index", "VideoLanguage", FormMethod.Post, new { videoId = Model.VideoId, languageId = Model.SelectedLanguage.LanguageId }))
{
@Html.Hidden("videoId", Model.VideoId)
@Html.Hidden("videoLanguageId", Model.SelectedLanguage.LanguageId)
<div>
@Html.DropDownListFor(model => model.SelectedLanguage.LanguageId, ViewData["LanguageId"] as SelectList)
</div>
<div>
<input type="submit" value="Add Language"/>
</div>
... code keeps going
}
在您的控制器中,您还应该有两个名称相同的方法GET和SET:
public ActionResult Index()
{
//Here just get a view
}
[HttpPost]
public ActionResult Index(int? videoId, int languageId = 0)
{
//Here code to save in database
}