通过组合动作链接和 ASP.Net MVC 5 中的输入将用户键入的输入从视图传递到动作控制器?
Posted
技术标签:
【中文标题】通过组合动作链接和 ASP.Net MVC 5 中的输入将用户键入的输入从视图传递到动作控制器?【英文标题】:Passing a user-typed input from View to Action Controller via combined action link and input in ASP.Net MVC 5? 【发布时间】:2016-09-17 17:25:17 【问题描述】:这是一个ASP.Net MVC 5
项目。
我已阅读以下有用的帖子:
ASP.Net MVC How to pass data from view to controller
其中解释了如何将数据从View
传递到ASP.Net MVC
中的Controller
。帖子中的主要思想是
-
在
View
中使用匹配模型表单发布(输入)和Action Controller
中的名称约定参数,或者
创建一个操作链接,其中我们有一个匿名对象,其名称约定参数为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)
由ActionLink
调用的(可能的)对应的Action Controller
如下所示:
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)
现在,如您所见,View
中的Action Link
参数和Controller
中Action Controller
的参数完美匹配,除了: comment
.
View
可以在渲染时由 razor 渲染所有其他参数,但 comment
应该是用户键入的输入(文本)。
现在,当按下Action Link
时,如何将这个comment
从View
与其余参数一起传递给Controller
? ASP.Net MVC 5
中是否有解决此问题的方法?
【问题讨论】:
为什么不能在 ActionLink 的匿名对象参数中传递comment
??
您需要提供有关您的方案的更多信息。您的方法建议您更改/更新数据,这意味着它应该是 POST,而不是 GET。您在视图中引用item
的事实表明您在循环中生成它,这将产生更多问题。为什么要发回所有这些额外的参数,而不仅仅是项目 ID 和 cmets?
@Fourat 因为在渲染时评论是未知的。该评论在用户输入后才知道。
@StephenMuecke 我需要动作中的所有这些额外参数。假设我们不能把它放在链接中,我想知道是否有办法与其他人一起传递评论参数。
您不应该需要所有这些参数(您的控制器将它们发送到视图,而您只需将它们全部原封不动地再次发送回去 - 您最好将对象 ID 连同评论一起发送回,然后在控制器中再次获取那些其他值)
【参考方案1】:
通常您会使用表单并将这些数据发回,而不是使用 ActionLink。但是,由于 ActionLink 基本上是一个 <a>
,其 HREF 设置为操作方法 URL,因此您可以使用 javascript 附加它(例如,在 HTML 属性中,如果您提供 CmtLink 的 ID):
$("#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);
);
点击时,它总是可以获取最近输入的值,或者如果 cmets 为空,则可以取消默认行为。
【讨论】:
这是一个非常有趣的技巧!让我试试吧!无论如何,你得到了我的支持! :)以上是关于通过组合动作链接和 ASP.Net MVC 5 中的输入将用户键入的输入从视图传递到动作控制器?的主要内容,如果未能解决你的问题,请参考以下文章
VS 2015 ASP.NET 4 MVC 5 中的打字稿 - 设置和选择的工作组合是啥?
ASP.NET MVC教程五:ASP.NET MVC中的路由