我在asp.net mvc 5项目上工作。
在用户从ul li
html元素中进行选择后,我有问题将字符串值传递给action方法。
这是HTML代码:
@using (Html.BeginForm("SetCulture", "Home"))
{
<ul class="top-links list-inline" >
<li>
<a class="dropdown-toggle no-text-underline" data-toggle="dropdown" href="#"><img class="flag-lang" src="~/assets/images/flags/no.png" width="16" height="11" alt="lang" />NORSK</a>
<ul class="dropdown-langs dropdown-menu" name="culture">
<li><a value="no" tabindex="-1"><img class="flag-lang" src="~/assets/images/flags/no.png" width="16" height="11" alt="lang"/>NORSK</a></li>
<li class="divider"></li>
<li><a value="us" tabindex="-1"><img class="flag-lang" src="/assets/images/flags/us.png" width="16" height="11" alt="lang" /> ENGLISH</a></li>
<li><a value="de" tabindex="-1"><img class="flag-lang" src="/assets/images/flags/de.png" width="16" height="11" alt="lang" /> GERMAN</a></li>
<li><a value="ru" tabindex="-1"><img class="flag-lang" src="/assets/images/flags/ru.png" width="16" height="11" alt="lang" /> RUSSIAN</a></li>
</ul>
</li>
</ul>
}
选择实施后触发的jQuery代码:
<script type="text/javascript">
var plugin_path = '/assets/plugins/';
(function ($) {
$('ul[name = "culture"]').click(function () {
$(this).parents("form").submit(); // post form
});
})(jQuery);
</script>
这是服务器端的动作方法:
public ActionResult SetCulture(string culture)
{
culture = CultureHelper.GetImplementedCulture(culture);
// Save culture in a cookie
HttpCookie cookie = Request.Cookies["_culture"];
if (cookie != null)
cookie.Value = culture; // update cookie value
else
{
cookie = new HttpCookie("_culture");
cookie.Value = culture;
cookie.Expires = DateTime.Now.AddYears(1);
}
Response.Cookies.Add(cookie);
return RedirectToAction("Index");
}
在选择用户之后触发了上述操作方法。
但culture
参数始终为null的问题!
所以我的问题是为什么culture
参数总是为空?我期望culture参数符合li HTML
元素中选择的值。
答案 0 :(得分:1)
如上所述,UL永远不会回发一个值 - 因为没有选择功能。您可以做的是拥有一个隐藏的<select>
元素,包含所有值,并且单击列表中的项目,使用JavaScript更改选择,并将该值发回服务器。或者存储与UL相关联的<input type="hidden" name="culture" />
;单击LI时,使用JavaScript更新隐藏字段,然后将该值重新发送回服务器。
如果您只向服务器发送一个值,则可以设置li CLICK事件,然后点击也使用$.ajax
发布值。
编辑:您可以使用以下内容更新隐藏字段,该字段会在下拉列表中找到所有A标记(由CSS类定位,但可以是任何内容)。
$(".dropdown-langs").find("li a").on("click", function() {
var lang = $(this).attr("value");
$("#hiddenID").val(lang);
$(this).parents("form").submit();
});
类似的东西。