asp.net-mvc如何将一个变量从视图传递给 ASP.NET 中的控制器

发布时间: 2017/3/25 0:39:27
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

发现了类似的问题,是我的但在所有这些例子中,变量是模型的一部分。我试图通过在 javascript 中,这不是模型的一部分中创建的变量。

代码︰

 $(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 */
        @Html.Action("CheckDirectory", "Home", new { email = ???});

    }
});

有没有办法填补???与上述的电子邮件吗?

解决方法 1:

回答你的问题

有没有办法填补???与上述的电子邮件吗?

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

@Url.Action("checkdirectory", "home")

在您的脚本,假设它直接在视图中,它将被取代生成的 URL 如

/home/checkdirectory

您的代码使用

@Html.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);
}

你可能使用 jQuery (因为 XMLHttpRequests 不是正常化的乐趣),像做

$(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 */
        });

});

这假定你有 <input /> 元和 idemail 。进行相应的调整。此外,Url 帮手只使用视图; 内如果你这样做在一个单独的 JavaScript 文件,,替换硬编码的字符串 (或任何其他适合你)。

编辑︰

因为它似乎完全没你想做什么,在这里是返回一个不同的视图,基于用户的"类型"的一个示例︰

public ActionResult ScheduleMe(string email = "")
{
    if(!string.IsNullOrWhiteSpace(email))
    {
        ActionResult response = null;
        var userType = YourCodeToVerifyEmail(email);

        // Assuming userType would be strings like below
        switch(userType)
        {
            case "STAFF":
                response = View("StaffScheduler");
                break;

            case "STUDENT":
                response = View("StudentScheduler");
                break;

            default:
                response = View("ReadOnlyScheduler");
                break;
        }

        return response;
    }

    return View("NoEmail");
}

这假定您将拥有 4 可能的观点︰ 你提到的三个,再加上一个"错误"视图时没有电子邮件参数给出了 (你还能用,通过重定向到另一个动作)。这种变化还假定用户已经以某种方式定位到像hxxp://yourdomain.tld/home/scheduleme?email=peter@innotech.com一样的东西

官方微信
官方QQ群
31647020