使用Html.BeginFrom在ASP.Net MVC中提交一个带有锚(<a>)标记且具有一定值的表单
Submit a form with anchor (<a>) tag with some value in ASP.Net MVC using Html.BeginFrom
我正在使用Html.BeginFrom…创建一个使用外部登录提供程序的from Tag and Submit请求。
帐户控制器中的HttpPost操作
//
// POST: /Account/ExternalLogin
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult ExternalLogin(string provider, string returnUrl)
{
return new ExternalLoginResult(provider, Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));
}
我需要将RetunUrl和Provider发送到上述操作方法目前,我正在使用Foreach
和Razor
创建多个表单
@foreach (ExternalLoginViewModel loginViewModel in Model)
{
using (Html.BeginForm("ExternalLogin", "Account", new { Provider = loginViewModel.AuthenticationClientData.DisplayName, ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post))
{
@Html.AntiForgeryToken()
<a class="@loginViewModel.AnchorCssClass" style="@loginViewModel.AnchorCssStyle" href="#">
<div class="@loginViewModel.DivCssClass" style="@loginViewModel.DivCssStyle">
<span aria-hidden="true" class="@loginViewModel.IconCssClass"></span>
</div>
</a>
}
}
但我认为可以使用单个from来完成,但我不知道如何提供Provider
值,该值随anchorTag而变化。类似于:
using (Html.BeginForm("ExternalLogin", "Account", new { Provider = "<SomeValue>", ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post))
{
@Html.AntiForgeryToken()
@foreach (ExternalLoginViewModel loginViewModel in Model)
{
<a class="@loginViewModel.AnchorCssClass" style="@loginViewModel.AnchorCssStyle" href="#">
<div class="@loginViewModel.DivCssClass" style="@loginViewModel.DivCssStyle">
<span aria-hidden="true" class="@loginViewModel.IconCssClass"></span>
</div>
</a>
}
}
前面案例中使用的Javascript是(工作正常)
<script type="text/javascript">
$(document).ready(function() {
$(document).on("click", ".CSSclassonAnchor", function (e) {
e.preventDefault();
var form = $(this).closest("form");
form.submit();
});
});
</script>
我认为以某种方式使用锚标签发布数据是可能的这方面的任何帮助都将是巨大的。。感谢
一种方法是向表单中添加一个隐藏字段,并用javascript填充它。在您的视图中,将BeginForm修改为不包含Provider参数,并在表单中添加<input type="hidden" />
:
using (Html.BeginForm("ExternalLogin", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.Hidden("Provider", "", new {id=hdnprovider})
@foreach (ExternalLoginViewModel loginViewModel in Model)
{
<a class="@loginViewModel.AnchorCssClass" style="@loginViewModel.AnchorCssStyle" href="#" data-name="@loginViewModel.AuthenticationClientData.DisplayName">
<div class="@loginViewModel.DivCssClass" style="@loginViewModel.DivCssStyle">
<span aria-hidden="true" class="@loginViewModel.IconCssClass"></span>
</div>
</a>
}
}
然后在Javascript中使用点击链接的数据名称属性,并将其分配给隐藏的:
$(document).ready(function() {
$('a[data-name]').click(function (e) {
e.preventDefault();
var form = $(this).closest("form");
$("#hdnprovider").val($(this).data("Name"));
form.submit();
});
});
由于隐藏的名称为"Provider",它将自动绑定到控制器中的"Provider"参数。
相关文章:
- 正在检测导航到<a name=“;最新主题”></a>
- 如何附加<ul><李>元素位于某个特定条件的父元素列表之间
- 在<script src=“"></脚本>标签
- 等效于<script src=“;something1.json”></脚本>
- CSS/.JS问题,<ul><李>在Megamenu中
- 如何在<td></td>在Procractor中
- 显示“<script src='some.js'></脚本>"在Html文档中
- 如何将Array转换为<ul><李>以字母为标题的字母列表
- <script src=“//代码.jquery.com/jquery-1.11.1.min.js”></
- 选择<脚本></脚本>作为html正文中的纯文本
- 可折叠<UL><李>不起作用
- $.mobile.loadPage()和$(“linkBtn”).click();t负载<头部></头部&
- <脚本/>vs<脚本></脚本>webpack和angular
- Javascript/RRails-如何包装link_to而不是<a></a>在javascript
- jQuery在处理<选择><选项>
- 布局lt md已被弃用.请使用`layout gt-<xxx>`变种
- 在<%%中定义的访问变量>从<脚本></脚本>
- 页面设计<a href><按钮><输入>在JSP中
- 注入html标记<ul></ul>在我的<李></李>元素
- jQuery选择器<按钮></按钮>