如何在MVC4中的Controller中正确执行方法

时间:2013-01-29 17:15:07

标签: c# html asp.net-mvc asp.net-mvc-4

我有一个简单的MVC应用程序,它从用户检索数据库服务器,数据库,用户名和密码,以存储在XML文件中。我想在屏幕上添加一个“测试连接”按钮,让它在控制器上执行一个名为TestConnection的方法。问题是TestConnection方法在单击时重置屏幕上的所有信息,因为返回的视图没有模型。 (因为正在进行GET操作)。这是我的代码:

来自Controller(名为FrameworkConfigurationController.cs

  public ActionResult TestConnection()
    {
        return View("Index");
    }

    [HttpPost]
    public ActionResult TestConnection(FrameworkConfigurationViewModel viewModel)
    {           
        // TODO: Test will occur here
        viewModel.DbConnectionMessage = string.IsNullOrEmpty(viewModel.DatabaseName) ? "Connection unsuccessful" : "Connection successful";

        return View("Index", viewModel);
    }

从我的观点(FrameworkConfiguration/Index):

@model Framework.ViewModels.FrameworkConfigurationViewModel

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
 }

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)

<fieldset>
    <legend>FrameworkConfigurationViewModel</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.ServerName)
    </div>

    @* Edited for brevity *@

    <button type="submit" onclick="location.href='@Url.Action("TestConnection")'">
       Test Connection</button>

    @Html.ValueFor(model => model.DbConnectionMessage)

    <p>
        <input type="submit" value="Save" />            
    </p>
</fieldset>
}

<div>
    @Html.ActionLink("Back to Dashboard", "Index", "Home")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

不可否认,我是MVC编程的新手。我来自Silverlight / MVVM背景,所以这个概念对我来说并不陌生......网络编程的断开性质是。我已经遵循了一些教程,但它们似乎都没有涵盖这类事情 - 每个例子都是人为的。我知道如何使用webforms和代码隐藏来实现这一点,但我想用MVC实现这一点。

有没有办法“强制”POST操作而不是GET?我的印象是

<button type="submit">

完成了。也许我写的onclick的实现是不正确的。我确信这是HTML 101的东西,但我似乎无法找到一个简单的答案。

感谢您提供的任何帮助,

杰森

1 个答案:

答案 0 :(得分:2)

为什么不让“测试连接”按钮触发Ajax操作来调用控制器,并显示结果?

这样你就可以避免提交整个页面了。

如果你不熟悉细节,这里有一个关于Ajax和MVC 4入门的很好的概述

http://ofps.oreilly.com/titles/9781449320317/ch_AJAX.html