0

我正在尝试将强类型 ViewBag 从 Controller 传递到 View,然后从 View 调用 jquery 链接单击上的静态方法,该方法使用 View bag 属性作为参数。

在控制器中,我有

public ActionResult LoginUser(string userName, string password)
{
    MyMembershipUser myUser = runtime.MyMembership.GetUser(userName);
    **ViewBag.MyUser = myUser;** //Here I assign user to ViewBag so I can pass it to                            
    return View("Login");        // View and from there as paramater to static method.

}

在我的“登录”视图下面,我有在脚本中调用我的 SendEmail 静态方法的代码。

     <div id="login">
            <p>    
          <span class="link" id="link">Generate Email.</span><br />
            </p>
        </div>  

<script type="text/javascript">
    $('#link').click(function () {           
        @SendEmailClass.SendEmail(ViewBag.MyUser);// Here I pass User from ViewBag to       
                                                  // static Method
    });
</script>

下面是我使用静态方法的静态类。

public static class SendEmailClass
 {
      public static void SendEmail(MyMembershipUser myUser)
      {
        SendEmail(myUser, string.Empty, string.Empty, string.Empty, string.Empty);
      }
}

由于控件尝试从 View 调用静态方法。它失败,异常为“无法将类型 'void' 隐式转换为 'Object'”。

即使我尝试在方法调用中强制转换它,类似这样的东西也会@SendEmailClass.SendEmail((MyMembershipUser)ViewBag.MyUser)给出同样的错误。

我的操作方法返回类型有问题吗?我不想在这里返回任何东西。我只想发邮件。

4

1 回答 1

0

您不能直接从 javascript 调用用 C# 编写的静态方法。

它抛出异常“无法将类型 'void' 隐式转换为 'Object'”,因为方法 SendEmail 返回“void”,并且当您使用 @ 后跟方法时,razor 期望打印一个对象。

您可以在控制器中创建另一个操作,在其中调用 SendMail 方法,在您的链接中,您可以使用 ajax 调用此操作并从 MyMembershipUser 对象传递您需要的参数。

要将 ajax 与 Jquery 一起使用,您可以开始阅读以下内容: http: //api.jquery.com/jQuery.get/

于 2013-04-09T22:29:39.510 回答