1

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

从控制器(命名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 的东西,但我似乎找不到一个简单的答案。

谢谢你的尽心帮助,

杰森

4

1 回答 1

2

为什么不让 Test Connection 按钮触发 Ajax 操作来调用控制器并显示结果?

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

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

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

于 2013-01-29T17:17:33.067 回答