我试图使用HTML按钮调用c#类方法。 在另一个话题中,人们建议我使用AJAX。我看过不同的教程并尝试实现它,但是它只是不适合我。
现在我只想让按钮给我一个弹出窗口(我知道方法正在被调用)我要调用的方法是来自类HomeController的setLang(string lang)
这就是我的onclick事件
<input type="submit" onclick="setLanguage();" value="submit">
这是脚本部分,我在同一页面中有这个
<script type="text/javascript">
function setLanguage() {
var lang = "en";
$.post('@Url.Action("setLang","HomeController")/' + lang,function(){
//i'm not expecting a result to process
});
}
</script>
但是当我点击我的按钮时没有任何反应。
我在这里错过了一些东西吗?编辑:函数被调用,但回调不是
更新:仍然无法正常工作,这是我当前的代码(按要求)
按钮(index.aspx)
<input type="button" onclick="setLanguage();" value="submit">
function(index.aspx)
<script type="text/javascript">
function setLanguage() {
alert("this message shows");
$.post('Url.Action("setLang","Home")/?lang=' + lang,
function (data) {
alert("this message does not");
});
}
</script>
HomeController.cs中的
public JsonResult setLang(string lang)
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang);
.....//a lot more code, until it reaches
return Json("Language: " + lang);
}
答案 0 :(得分:2)
将以下内容添加到HomeController的索引视图中:
<input type="button" onclick="setLanguage();" value="submit">
<script type="text/javascript">
function setLanguage() {
var lang = "en";
$.post('@Url.Action("setLang","Home")/?lang=' + lang,
function (data) {
alert(data);
});
}
</script>
与代码相比,我改变了一些事情:
然后在服务器上将以下操作方法添加到HomeController
public JsonResult setLang(string lang)
{
return Json("Language: " + lang);
}
该函数接受您的lang参数,然后返回只带有简单字符串值的JsonResult。 Json是在浏览器和服务器之间发送数据的首选方式。
您可以展开此示例并将更复杂的数据返回到浏览器。
答案 1 :(得分:2)
由于您通过 POST Http类型调用操作方法,因此请确保您的Action方法也已准备好响应HTTPPostType请求。您可能需要将HttpPost
注释添加到操作方法中。
[HttpPost]
public ActionResult setLang(string id)
{
return Content("MVC is awesome");
}
要处理action方法的响应,请使用带参数的回调方法。在下面的示例中,您将从变量data
中获取action方法的响应。
<input type="submit" value="submit">
<script type="text/javascript">
$(function(){
$("form").submit(function(e){
e.preventDefault(); // preventing the default form submit behaviour
var lang="en"
$.post("@Url.Action("setLang","Home")/" + lang,function(data){
alert(data);
});
});
});
</script>