Javascript 如何在ASP.NET中将变量从视图传递到控制器

Javascript 如何在ASP.NET中将变量从视图传递到控制器,javascript,html,asp.net,asp.net-mvc,Javascript,Html,Asp.net,Asp.net Mvc,我发现了与我类似的问题,但在所有这些例子中,变量都是模型的一部分。我试图传递一个用javascript创建的变量,它不是模型的一部分 代码: 有没有办法填写表格???通过上述电子邮件?您可以在控制器URL中将您的值作为GET参数传递: $(document).ready(function () { var url = document.URL; var index = url.indexOf("?email="); var email; /* If there is an E

我发现了与我类似的问题,但在所有这些例子中,变量都是模型的一部分。我试图传递一个用javascript创建的变量,它不是模型的一部分

代码:


有没有办法填写表格???通过上述电子邮件?

您可以在控制器URL中将您的值作为GET参数传递:

$(document).ready(function () {

  var url = document.URL;
  var index = url.indexOf("?email=");
  var email;

  /* If there is an EMAIL in URL, check directory to confirm it's valid   */
  if (index > -1) {
    /* There is an email */
    email = url.substr((index + 7));
    email = email.substr(0, (email.length - 4)) + "@@mymail.ca";

    /* Check directory to see if this email exists */
    window.location.href = '/CheckDirectory/Home?email=' + email;
  }
});

您可以在控制器URL中将值作为GET参数传递:

$(document).ready(function () {

  var url = document.URL;
  var index = url.indexOf("?email=");
  var email;

  /* If there is an EMAIL in URL, check directory to confirm it's valid   */
  if (index > -1) {
    /* There is an email */
    email = url.substr((index + 7));
    email = email.substr(0, (email.length - 4)) + "@@mymail.ca";

    /* Check directory to see if this email exists */
    window.location.href = '/CheckDirectory/Home?email=' + email;
  }
});

回答你的问题

有没有办法填写表格???用上面的邮件

不是。Razor代码类似于PHP或任何其他服务器端模板语言——它在发送响应之前在服务器上进行评估。所以,如果你有

@Url.Action("checkdirectory", "home")
[HttpGet]
public ActionResult CheckDirectory(string email = "")
{
    bool exists = false;

    if(!string.IsNullOrWhiteSpace(email))
    {
        exists = YourCodeToVerifyEmail(email);
    }

    return Json(new { exists = exists }, JsonRequestBehavior.AllowGet);
}
$(function(){

    var url = '@Url.Action("checkdirectory", "home")';

    var data = { email : $('#email').val() };

    $.get(url, data)
        .done(function(response, status, jqxhr) {  

            if(response.exists === true) {
                /* your "email exists" action */
            }
            else {
                /* your "email doesn't exist" action */
            }

        })
        .fail(function(jqxhr, status, errorThrown) { 
            /* do something when request errors */
        });

});
在脚本中,假设它直接位于视图中,它将被生成的URL替换,如

/home/checkdirectory
您的代码,它使用

@Html.Action("checkdirectory", "home")
实际上执行一个单独的操作,并将响应作为字符串注入调用它的视图中。可能不是你想要的

所以,让我们试着让你走上正确的道路。假设您的控制器操作看起来像

@Url.Action("checkdirectory", "home")
[HttpGet]
public ActionResult CheckDirectory(string email = "")
{
    bool exists = false;

    if(!string.IsNullOrWhiteSpace(email))
    {
        exists = YourCodeToVerifyEmail(email);
    }

    return Json(new { exists = exists }, JsonRequestBehavior.AllowGet);
}
$(function(){

    var url = '@Url.Action("checkdirectory", "home")';

    var data = { email : $('#email').val() };

    $.get(url, data)
        .done(function(response, status, jqxhr) {  

            if(response.exists === true) {
                /* your "email exists" action */
            }
            else {
                /* your "email doesn't exist" action */
            }

        })
        .fail(function(jqxhr, status, errorThrown) { 
            /* do something when request errors */
        });

});
您可以使用jQuery(因为XMLHttpRequests规范化并不有趣)执行以下操作

@Url.Action("checkdirectory", "home")
[HttpGet]
public ActionResult CheckDirectory(string email = "")
{
    bool exists = false;

    if(!string.IsNullOrWhiteSpace(email))
    {
        exists = YourCodeToVerifyEmail(email);
    }

    return Json(new { exists = exists }, JsonRequestBehavior.AllowGet);
}
$(function(){

    var url = '@Url.Action("checkdirectory", "home")';

    var data = { email : $('#email').val() };

    $.get(url, data)
        .done(function(response, status, jqxhr) {  

            if(response.exists === true) {
                /* your "email exists" action */
            }
            else {
                /* your "email doesn't exist" action */
            }

        })
        .fail(function(jqxhr, status, errorThrown) { 
            /* do something when request errors */
        });

});
这假设您有一个
元素,该元素的
id
email
。相应地调整。此外,Url助手只能在视图中使用;如果要在单独的JavaScript文件中执行此操作,请将其替换为硬编码字符串(或其他适合您的内容)

编辑:

由于我似乎没有完全理解您要做的事情,下面是一个基于用户“类型”返回不同视图的示例:


这假设您有4种可能的视图:您提到的三种视图,以及在没有给出电子邮件参数时的“错误”视图(您也可以通过重定向到另一个操作来处理)。此变体还假设用户以某种方式导航到以下内容hxxp://yourdomain.tld/home/scheduleme?email=peter@innotech.com

回答您的问题

有没有办法填写表格???用上面的邮件

不是。Razor代码类似于PHP或任何其他服务器端模板语言——它在发送响应之前在服务器上进行评估。所以,如果你有

@Url.Action("checkdirectory", "home")
[HttpGet]
public ActionResult CheckDirectory(string email = "")
{
    bool exists = false;

    if(!string.IsNullOrWhiteSpace(email))
    {
        exists = YourCodeToVerifyEmail(email);
    }

    return Json(new { exists = exists }, JsonRequestBehavior.AllowGet);
}
$(function(){

    var url = '@Url.Action("checkdirectory", "home")';

    var data = { email : $('#email').val() };

    $.get(url, data)
        .done(function(response, status, jqxhr) {  

            if(response.exists === true) {
                /* your "email exists" action */
            }
            else {
                /* your "email doesn't exist" action */
            }

        })
        .fail(function(jqxhr, status, errorThrown) { 
            /* do something when request errors */
        });

});
在脚本中,假设它直接位于视图中,它将被生成的URL替换,如

/home/checkdirectory
您的代码,它使用

@Html.Action("checkdirectory", "home")
实际上执行一个单独的操作,并将响应作为字符串注入调用它的视图中。可能不是你想要的

所以,让我们试着让你走上正确的道路。假设您的控制器操作看起来像

@Url.Action("checkdirectory", "home")
[HttpGet]
public ActionResult CheckDirectory(string email = "")
{
    bool exists = false;

    if(!string.IsNullOrWhiteSpace(email))
    {
        exists = YourCodeToVerifyEmail(email);
    }

    return Json(new { exists = exists }, JsonRequestBehavior.AllowGet);
}
$(function(){

    var url = '@Url.Action("checkdirectory", "home")';

    var data = { email : $('#email').val() };

    $.get(url, data)
        .done(function(response, status, jqxhr) {  

            if(response.exists === true) {
                /* your "email exists" action */
            }
            else {
                /* your "email doesn't exist" action */
            }

        })
        .fail(function(jqxhr, status, errorThrown) { 
            /* do something when request errors */
        });

});
您可以使用jQuery(因为XMLHttpRequests规范化并不有趣)执行以下操作

@Url.Action("checkdirectory", "home")
[HttpGet]
public ActionResult CheckDirectory(string email = "")
{
    bool exists = false;

    if(!string.IsNullOrWhiteSpace(email))
    {
        exists = YourCodeToVerifyEmail(email);
    }

    return Json(new { exists = exists }, JsonRequestBehavior.AllowGet);
}
$(function(){

    var url = '@Url.Action("checkdirectory", "home")';

    var data = { email : $('#email').val() };

    $.get(url, data)
        .done(function(response, status, jqxhr) {  

            if(response.exists === true) {
                /* your "email exists" action */
            }
            else {
                /* your "email doesn't exist" action */
            }

        })
        .fail(function(jqxhr, status, errorThrown) { 
            /* do something when request errors */
        });

});
这假设您有一个
元素,该元素的
id
email
。相应地调整。此外,Url助手只能在视图中使用;如果要在单独的JavaScript文件中执行此操作,请将其替换为硬编码字符串(或其他适合您的内容)

编辑:

由于我似乎没有完全理解您要做的事情,下面是一个基于用户“类型”返回不同视图的示例:


这假设您有4种可能的视图:您提到的三种视图,以及在没有给出电子邮件参数时的“错误”视图(您也可以通过重定向到另一个操作来处理)。此变体还假设用户以某种方式导航到以下内容hxxp://yourdomain.tld/home/scheduleme?email=peter@innotech.com

使用
@Html.Action()
没有任何意义。这将在客户端JavaScript中产生语法错误。至于“传递值”,您可以使用JavaScript更新客户端标记。因此,如果有东西要发布到控制器,那么可以在标记中的URL上设置它,或者为表单发布设置表单元素的值。或者您希望向控制器方法发出AJAX请求以执行某些操作?现在还不清楚你想在这里做什么。你需要学习AJAX。@David我在这个视图上有一个剑道调度程序,它允许人们在拥有有效帐户的情况下创建预订。要检查帐户目录,我必须导航到一个外部URL,以查看电子邮件列表(帐户ID)。因此,在加载调度程序之前,我正在尝试调用Home controller中的“CheckDirectory”来验证电子邮件是否有效。@SLaks我现在正在研究AJAX,谢谢。您是在尝试将当前页面重定向到/Home/CheckDirectory,还是调用AJAX函数并处理结果?使用
@Html.Action()
没有任何意义。这将在客户端JavaScript中产生语法错误。至于“传递值”,您可以使用JavaScript更新客户端标记。因此,如果有东西要发布到控制器,那么可以在标记中的URL上设置它,或者为表单发布设置表单元素的值。或者您希望向控制器方法发出AJAX请求以执行某些操作?现在还不清楚你想在这里做什么。你需要学习AJAX。@David我在这个视图上有一个剑道调度程序,它允许人们在拥有有效帐户的情况下创建预订。要检查帐户目录,我必须导航到一个外部URL,以查看电子邮件列表(帐户ID)。因此,在加载调度程序之前,我正在尝试调用Home controller中的“CheckDirectory”来验证电子邮件是否有效。@SLaks我现在正在研究AJAX,谢谢。您是在尝试将当前页面重定向到/Home/CheckDirectory,还是调用AJAX函数并对结果进行处理?@UğurDinç这些解释有意义吗?另外,您还需要阅读一些内容——MVC框架在处理JSON值时有一些缺陷