Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从控制器ASP.NET MVC返回视图时调用jquery代码_Jquery_Asp.net_Asp.net Mvc - Fatal编程技术网

从控制器ASP.NET MVC返回视图时调用jquery代码

从控制器ASP.NET MVC返回视图时调用jquery代码,jquery,asp.net,asp.net-mvc,Jquery,Asp.net,Asp.net Mvc,我有一个MVC应用程序,希望在从控制器返回视图时启动jquery代码 这是我在我的_Layout.cshtml中的jquery行(我只希望在控制器调用时执行此代码,而不是在页面加载时执行,我需要某种函数??) 这可能吗?解决这个问题的最好办法是什么 请求的代码: UserAccount.cs namespace ProfessionalDev.Models { public class UserAccount { [Required(ErrorMessage =

我有一个MVC应用程序,希望在从控制器返回视图时启动jquery代码

这是我在我的_Layout.cshtml中的jquery行(我只希望在控制器调用时执行此代码,而不是在页面加载时执行,我需要某种函数??)

这可能吗?解决这个问题的最好办法是什么

请求的代码

UserAccount.cs

namespace ProfessionalDev.Models
{
    public class UserAccount
    {
        [Required(ErrorMessage = "Required Field")]
        public string email { get; set; }

        [Required(ErrorMessage = "Required Field")]
        public string password { get; set; }

        public string FirstName { get; set; }
        public string MiddleName { get; set; }
        public string LastName { get; set; }

        public bool AddOpenClass { get; set; }

        public UserAccount() { }
    }
}
HomeController.cs

[HttpPost]
public ActionResult Index(UserAccount user)
{
    if (ModelState.IsValid)
    {
        //Authenticate User

        //User Failed to Authenticate
        user.AddOpenClass = true;
        TempData["alert"] = "alert-danger";
        TempData["error"] = "Email or Password Incorrect";
    }

    user.AddOpenClass = true;
    return View(user);
}
_Layout.cshtml

@model ProfessionalDev.Models.UserAccount

<!DOCTYPE html>
<html>
<head>
...
<ul class="nav navbar-nav navbar-right">
    <li><a href="#">New User</a></li>
    <li class="dropdown" id="drpdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Log In <span class="caret"></span></a>
        <ul class="dropdown-menu">
            <li>
                @Html.Partial("_Errors")

                @using (Html.BeginForm("Index", "Home", FormMethod.Post))
                {
                    @Html.ValidationMessageFor(model => model.email)
                    @Html.TextBoxFor(model => model.email, new { @class = "form-control", @placeholder = "Email" })

                    @Html.ValidationMessageFor(model => model.password)
                    @Html.PasswordFor(model => model.password, new { @class = "form-control", @placeholder = "Password" })

                    <input type="submit" value="Submit" class="btn btn-primary" />
                }
            </li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Forgot Password?</a></li>
        </ul>
    </li>
</ul>
...
    @if (Model.AddOpenClass)
    {
    <script>
       $(function(){
            $("#drpdown").addClass("open");
       });
    </script>
    }

</body>
</html>
@model ProfessionalDev.Models.UserAccount
...
    • @Html.Partial(“\u错误”) @使用(Html.BeginForm(“Index”,“Home”,FormMethod.Post)) { @Html.ValidationMessageFor(model=>model.email) @TextBoxFor(model=>model.email,新的{@class=“form control”,@placeholder=“email”}) @Html.ValidationMessageFor(model=>model.password) @Html.PasswordFor(model=>model.password,新的{@class=“form control”,@placeholder=“password”}) }
... @if(Model.AddOpenClass) { $(函数(){ $(“#drpdown”).addClass(“打开”); }); }
在操作方法中,将变量设置为ViewBag,您可以在布局页面中访问该变量,并根据需要执行JS

[HttpPost]
public ActionResult Index(UserAccount user)
{
    ViewBag.ShouldExecuteJs = true;
    if (ModelState.IsValid)
    {
        //Authenticate User
        ...
        //User Failed to Authenticate
        ...
        return View(user); //**FIRE UP JQUERY**
    }
    return View(user); //**FIRE UP JQUERY**
}
在Layout中,读取该值并使用该值确定是否要执行js代码

<script type="text/javascript">
   $(function(){
      var shouldExecuteJs="@ViewBag.ShouldExecuteJs";
      if(shouldExecuteJs)
      {
        $("#drpdown").addClass("open");
      }
   });
</script>

$(函数(){
var shouldExecuteJs=“@ViewBag.shouldExecuteJs”;
如果(应执行)
{
$(“#drpdown”).addClass(“打开”);
}
});

您应该将返回到视图的属性添加到用户模型中。这是一种比使用viewbag、tempdata等更好的方法,因为它允许您拥有强类型模型

[HttpPost]
public ActionResult Index(UserAccount user)
{
    if (ModelState.IsValid)
    {

        //User Failed to Authenticate
        if(auth.failed)
        {
            //You might have a property specifically for authentication like this:
            user.failedToAuthenticate = true;

            // Or you could have a generic error message property that you display when not null
            user.errorMessage = "Authentication Failed!";

            return View(user); 
        }
    }
}
然后在您看来

 @if(Model.failedToAuthenticate)
 {
    // Fire your jQuery
    <div class="alert-danger">@Model.errorMessage</div>
 }

or

@if(!string.IsNullorEmpty(Model.errorMessage))
{
    //Display error message
}
@if(Model.failedToAuthenticate)
{
//启动jQuery
@Model.errorMessage
}
或
@如果(!string.IsNullorEmpty(Model.errorMessage))
{
//显示错误消息
}

“当从控制器返回视图时”-还有什么方法?我将属性添加到我的模型中,就像Igor的回答一样,但是给了我
对象引用,没有设置为对象的实例。
。我可能在某个地方遗漏了一些东西,但不确定有问题的代码可能是什么。错误在这里
@if(Model.AddOpenClass)
您的问题可能在于您正在执行_layout.cshtml中的逻辑,但您的控制器实际上正在将模型返回到另一个视图。如果是这样的话,您将得到null ref异常,因为用户模型不在范围内。啊,好吧,可能就是这样。非常感谢。另外,尽量不要像那样使用Viewbag或Tempdata。更好的做法是在模型上创建user.errorMessage属性。我也会尝试在您的视图中保留css样式/类,我已经更新了我的示例来演示如何
[HttpPost]
public ActionResult Index(UserAccount user)
{
    if (ModelState.IsValid)
    {

        //User Failed to Authenticate
        if(auth.failed)
        {
            //You might have a property specifically for authentication like this:
            user.failedToAuthenticate = true;

            // Or you could have a generic error message property that you display when not null
            user.errorMessage = "Authentication Failed!";

            return View(user); 
        }
    }
}
 @if(Model.failedToAuthenticate)
 {
    // Fire your jQuery
    <div class="alert-danger">@Model.errorMessage</div>
 }

or

@if(!string.IsNullorEmpty(Model.errorMessage))
{
    //Display error message
}