从.cshtml文件调用控制器方法

时间:2015-03-17 13:45:07

标签: c# asp.net-mvc mono

我想通过我的Html.ActionLink页面中的index调用我的控制器类中的操作,但我收到错误并且无法理解这是为什么。

任何人都可以帮助我吗?

Test中的HomeController.cs操作是我要调用的操作。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using Microsoft.Exchange.WebServices.Data;

namespace ExchangeRazor.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index ()
        {
            var mvcName = typeof(Controller).Assembly.GetName ();
            var isMono = Type.GetType ("Mono.Runtime") != null;

            ViewData ["Version"] = mvcName.Version.Major + "." + mvcName.Version.Minor;
            ViewData ["Runtime"] = isMono ? "Mono" : ".NET";

            return View ();
        }


        public ActionResult Test()
        {

            ExchangeService service = new ExchangeService ();
            //CREDENTIALS!//
            service.Credentials = new WebCredentials ("*****@****.com", "******");
            service.Url = new Uri ("https://outlook.office365.com/EWS/Exchange.asmx");
            service.TraceEnabled = true;
            service.TraceFlags = TraceFlags.All;


            EmailMessage email = new EmailMessage (service);
            email.ToRecipients.Add ("********");
            email.Subject = "MacHallo";
            email.Body = new MessageBody ("Melding fra mac exchange webservices API");
            email.Send ();


            return RedirectToAction("Index");
        }

    }
}

Index.cshtml:

<h2>Welcome to ASP.NET MVC @ViewData["Version"] on @ViewData["Runtime"]!</h2>

<button>@Html.ActionLink("Send", "Test")</button>

修改:

  

system.missingMethodException而   找不到方法:&#39; System.Web.Routing.RouteCollection.get_AppendTrailingSlash&#39;。

     

描述:HTTP 500.Error处理请求。   详细信息:非Web异常。   异常来源(应用程序或对象的名称):System.Web.Mvc。

3 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

<form action="~/.../Test" method="post">
     <input type="submit" id="btnSend" value="Send" />
</form>

请注意,您需要相应地映射到Test控制器。

假设您有更多信息要提交,那么这会自动触发您的内容form submit。然后,这将调用您的控制器Test。您的另一种方法是使用Ajax,您也可以触发post

答案 1 :(得分:1)

此刻没有机会尝试,但您可以尝试删除[HttpPost]。

答案 2 :(得分:0)

由于您的操作Test产生副作用,我建议您使用POST代替GET

使用按钮将链接更改为表单。

<h2>Welcome to ASP.NET MVC @ViewData["Version"] on @ViewData["Runtime"]!</h2>

@using(Html.BeginForm("Test", "Home", FormMethod.Post))
{
    <button type="submit">Send</button>
}

然后装饰控制器方法。

[HttpPost]
public ActionResult Test() { /* ... */ }