Чтобы ответить на ваш вопрос
Есть ли способ, чтобы заполнить в ??? с электронной почтой выше?
№ Код 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 (потому что запросы XMLHttpRequest не весело нормализовать), сделать что-то вроде
$(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, замените его на жестко закодированную строку (или что-то еще для вас).
Edit:
Так как кажется, я не совсем получить то, что вы пытаетесь сделать, вот пример возвращения другого вида на основе «типа» пользователя:
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 protected]
Это использование '@ Html.Action()' не иметь смысл.Это приведет к синтаксической ошибке на клиентском JavaScript. Что касается «передачи значения», вы можете обновить разметку на стороне клиента с помощью JavaScript. Поэтому, если есть что-то, что можно отправить в контроллер, вы можете установить его по URL-адресу в разметке или установить значение элемента формы для сообщения формы. Или, возможно, вы хотите сделать запрос AJAX к методу контроллера для выполнения какой-либо операции? Не совсем понятно, что вы даже пытаетесь сделать здесь. – David
Вам нужно узнать об AJAX. – SLaks
@David У меня есть планировщик Kendo на этом представлении, что позволит людям создавать заказы, если у них есть действительная учетная запись. Чтобы проверить каталог учетных записей, я должен перейти к внешнему URL-адресу списка писем электронной почты (идентификаторы учетных записей). Поэтому, прежде чем загружать планировщик, я пытаюсь вызвать «CheckDirectory» на Домашнем контроллере, чтобы проверить, действительно ли электронная почта верна. – dexter