通过ASP.Net MVC 5中的组合操作链接和输入将用户输入的视图从View传递到Action Controller?

时间:2016-09-17 17:25:18

标签: c# asp.net asp.net-mvc razor

这是一个ASP.Net MVC 5项目。

我已阅读以下有用的帖子:

ASP.Net MVC How to pass data from view to controller

其中介绍了如何将View中的数据传递到Controller中的ASP.Net MVC。帖子中的主要想法是

  1. 使用View中的匹配模型表单(输入)和Action Controller中的name-convention-parameters,或
  2. 制作一个动作链接,其中我们有一个匿名对象,其名称约定参数route valuesAction Controller中的参数匹配。
  3. 现在我的案例略有不同......并希望得到一些解决方法。

    与上面的方法(2)类似,我已经有一个匿名对象的动作链接,其中名称约定参数使用razor动态生成,如下所示:

    @Html.ActionLink("Detail", item.DetailsName, item.ControllerName,
      new {
        pid = item.Pid, eid = item.Eid, mid = item.Mid, cid = item.Cid,
        manNo = item.TypeItem == "Create" ? item.ManCreateNo : item.ManEditNo,
        caneNo = item.TypeItem == "Create" ? item.CaneCreateNo : item.CaneEditNo,
        command = userCanAccept ? "acc" : "pass", from = ViewBag.From
      }, null)
    

    Action Controller调用的ActionLink对应的public ActionResult DetailsChange(int pid, int eid, int mid, int cid, int manNo = 1, int caneNo = 1, string command = null, string from = null, string comment = null) 如下所示:

    Action Link

    现在,正如您所见,View中的Action Controller参数和Controller的{​​{1}}参数匹配完美的,除了之一:comment

    所有其他参数可以由razor在渲染时由View呈现,但comment应该是用户输入的输入(文本)。

    现在,当按下comment时,如何将此ViewController传递到Action Link以及参数的休止符?在ASP.Net MVC 5中是否可以解决这个问题?

1 个答案:

答案 0 :(得分:1)

通常,您会使用表单并将此数据发回,而不是使用ActionLink。但是,由于ActionLink基本上是<a>,并且HREF设置为操作方法URL,您可以使用javascript附加它(例如,如果您提供CmtLink的ID,则在HTML属性中):

$("#CmtLink").on("click", function() {
    var href = $(this).attr("href");
    //I assume it doesn't exist, but it's good to check for an existing comment parameter
    //also assume at least one parameter present
    //Also assume comment control is textbox, not textarea
    href += "&comment=" + $("#comment").val();

    $("#CmtLink").attr("href", href);
});

点击后,这可以随时获取输入的最新值,或者如果注释为空则可以取消默认行为。