这是一个ASP.Net MVC 5
项目。
我已阅读以下有用的帖子:
ASP.Net MVC How to pass data from view to controller
其中介绍了如何将View
中的数据传递到Controller
中的ASP.Net MVC
。帖子中的主要想法是
View
中的匹配模型表单(输入)和Action Controller
中的name-convention-parameters,或route values
与Action Controller
中的参数匹配。现在我的案例略有不同......并希望得到一些解决方法。
与上面的方法(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
时,如何将此View
从Controller
传递到Action Link
以及参数的休止符?在ASP.Net MVC 5
中是否可以解决这个问题?
答案 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);
});
点击后,这可以随时获取输入的最新值,或者如果注释为空则可以取消默认行为。