我发现了与我相似的问题,但在所有这些例子中,变量都是模型的一部分。我试图传递一个在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 = ???});
}
});
有没有办法填写???上面的电子邮件?
答案 0 :(得分:3)
您可以将值作为GET参数传递给控制器URL:
$(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;
}
});
答案 1 :(得分: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 />
元素id
email
。相应调整。此外,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