0

我的页面上有一个下拉列表 (DropDownListFor) 和一个 ActionLink。基本上,我遇到的问题是我试图从下拉列表中捕获选定的值并将其作为 ID 传递到我的 ActionLink 中。这是我的代码:

@Html.DropDownListFor(x => x.Capsules, new SelectList(Model.Capsules, "pk", "name", "pk"))
<br />
@Html.ActionLink("Submit", "Create", 
    new { controller = "Process", id = /*JavaScript here to get the selected ID for the DropDownList above*/ },
    new { data_role = "button" })

对于我想要完成的事情,有没有办法将 JavaScript 嵌入到我的 Html.ActionLink 调用中?如果没有办法,或者不推荐,您能否建议另一种解决方案来解决此问题?提前致谢!

4

2 回答 2

1

您可以像这样为参数设置虚拟值id

@Html.ActionLink("Submit", "Create", 
    new { controller = "Process", id = "dummy" },
    new { data_role = "button" })

然后在单击链接时替换该值。

// Assuming your link's id is `submit`, and the dropdown's id is `capsules`
$('#submit').click(function() {
    var id = $('capsules').val();
    $(this).href = $(this).href.replace('dummy', id);
});
于 2013-02-27T04:20:36.657 回答
1

您可以通过使用 javascript 拦截链接来做到这一点 Darin发布了一个示例

但是,看起来您正在尝试使用 ActionLink 提交一些值,并且您最好创建一个包含您想要的所有值的视图模型,然后使用提交按钮发布所有内容。这允许您发布比 ID 更多的数据,防止您依赖 Javascript,并保留所有代码服务器端而不是混合和匹配。

从您发布的小代码来看 - 您已经有一个模型,可能是一些强类型实体,并且它有一个名为 Capsules 的属性。

在您的控制器中,创建包含视图数据的视图模型:

public class YourViewModel
{
   YourModel YourModel { get; set; }

   public int CapsuleId { get; set; }
}

然后你的观点:

@using( @Html.BeginForm( "Create", "Process"  ) )
{
@Html.DropDownListFor(m=> m.CapsuleId, new SelectList(Model.YourModel.Capsules, "pk", "name", "pk"))
<input type="submit">
}

然后你的控制器动作来处理这个:

[HttpPost]
public ActionResult Create( YourViewModel model )
{
   var id = model.CapsuleId;

  // do what you're going to do with the id
   return View();
}
于 2013-02-27T05:01:19.293 回答