2015-07-21 139 views
-1

可能会被问及回答...抱歉,但我一直在寻找一段时间。MVC:访问控制器中的数据属性

Razor视图

@foreach (var item in Model.LanguageList) 
{ 
    <li> 
    <a href="@Url.Action("ChangeLanguage", "UserHeader")" data_languageID="@item.LanguageID" data_someval="hello" data_somevalb="world"> 
     <div class="flag @item.LanguageFlag"> 
     </div> 
     <div class="flag-title"> @item.LanguageName</div> 
    </a> 
    </li> 
} 

如何访问我的控制器中的数据属性?

CONTROLLER

public ActionResult ChangeLanguage() 
    { 
     var x = ControllerContext; //// ??? get the collection of [data-xx] from where? 

     return RedirectToAction("Buttons", "Designer"); 
    } 
+0

Y您需要将模型发布到控制器中,或者使用参数进行获取。 – Turrican

+0

你不能。您需要传递值作为查询字符串参数并将这些参数添加到您的GET方法。 –

+0

所以要清楚:我可以访问我的[data-xxx]的唯一方法是使用javascript/jquery。 – Killilea

回答

1

data-*属性是客户端值,并且在该请求不被发送。

为了发送这些值,它们加入到路由值

@foreach (var item in Model.LanguageList) 
{ 
    <li> 
    <a href="@Url.Action("ChangeLanguage", "UserHeader", new { languageID=item.LanguageID, someval="hello", somevalb="world" })"> 
     <div class="flag @item.LanguageFlag"></div> 
     <div class="flag-title"> @item.LanguageName</div> 
    </a> 
    </li> 
} 

,包括参数的GET方法的价值观

public ActionResult ChangeLanguage(int LanguageID, string someval, string somevalb) 

另外,您可以处理这个使用JavaScript/jQuery的( ChangeLanguage()方法也需要修改,如上所示)

$('a').click(function() { 
    // get the url 
    var url = $(this).attr('href'); 
    // get the data attributes 
    var languageID = $(this).data('languageID'); 
    var someVal= $(this).data('someval'); 
    var someValB= $(this).data('somevalb'); 
    location.href = url + '?languageID=' + languageID + '&someVal =' + someVal + '&someValB=' + someValB; 
    return false; // cancel the default redirect 
}); 
相关问题