为什么回发调用发生后action方法参数为null?

时间:2017-02-20 16:44:11

标签: asp.net asp.net-mvc

我在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元素中选择的值。

1 个答案:

答案 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();
});

类似的东西。