保存页面状态mvc4

时间:2013-06-24 08:38:46

标签: c# jquery asp.net-mvc post

我很难看到如何在不创建会话var的情况下保存页面状态。 我有一个页面,其中一个按钮可以更改页面的状态,在帖子上可能会返回视图,但处于错误的状态。我试过ViewBag,这不能在java范围内设置。我需要一个解决方案来保存AuthType的值..

@model Trakman_Portal_Administration.Models.Connection

@ {

ViewBag.Title = "Create";
var conStringType = ViewBag.conStringType;

}

 @Scripts.Render("~/bundles/jquery")

 <script type='text/javascript'>

var authType = 1

$(document).ready(function () {
    alert(authType);
    if (authType == 0) {

        $("#usernameLabel").hide();
        $("#usernameField").hide().find('input:text').val("");

        $("#passwordLabel").hide();
        $("#passwordField").hide().find('input:text').val("");

        //$("#initialCatalogLabel").show();
        //$("#initialCatalogField").show();

        document.getElementById("button1").textContent = "Intergrated";
        authType = 1;
    }
    else {

        $("#usernameLabel").show();
        $("#usernameField").show();
        $("#passwordLabel").show();
        $("#passwordField").show();
        //$("#initialCatalogLabel").hide();
        //$("#initialCatalogField").hide();

        document.getElementById("button1").textContent = "SQL Authentication";
        authType = 0;
    }

    $("button").click(function () {

        //$("#usernameField").attr("value","");
        //$("#passwordField").attr("value","");


        if (authType == 0) {

            $("#usernameLabel").hide();
            $("#usernameField").hide().find('input:text').val("");

            $("#passwordLabel").hide();
            $("#passwordField").hide().find('input:text').val("");

            //$("#initialCatalogLabel").show();
            //$("#initialCatalogField").show();

            document.getElementById("button1").textContent = "Intergrated";
            authType = 1;

        }
        else {

            $("#usernameLabel").show();
            $("#usernameField").show();
            $("#passwordLabel").show();
            $("#passwordField").show();
            //$("#initialCatalogLabel").hide();
            //$("#initialCatalogField").hide();

            document.getElementById("button1").textContent = "SQL Authentication";
            authType = 0;

        }
    });
});

<h2>Create</h2>



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

<fieldset>
    <legend>connection</legend>
   <div class="editor-label">
       Authentication Type
   </div>
   <div>
       <button id="button1" value="Intergrated" name="intergrated" >SQL Authentication</button>
   </div>
   <br />
   <br />
   <br />

    <div class="editor-label">
        Connection Name
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.conName)
        @Html.ValidationMessageFor(model => model.conName)
    </div>
    <div class="editor-label">
       Data Source
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.dataSource)
        @Html.ValidationMessageFor(model => model.dataSource)
    </div>
     <div class="editor-label" id="initialCatalogLabel">
       Initial Catalog
    </div>
    <div class="editor-field" id="initialCatalogField"> 
        @Html.EditorFor(model => model.initialCatalog) 
        @Html.ValidationMessageFor(model => model.initialCatalog)
    </div>

    <div class="editor-label" id = "usernameLabel">
       Username
    </div>
    <div class="editor-field" id="usernameField">
       @Html.EditorFor(model => model.username)
        @Html.ValidationMessageFor(model => model.username)
    </div>
    <div class="editor-label" id = "passwordLabel">
       Password
    </div>
    <div class="editor-field" id = "passwordField">
        @Html.EditorFor(model => model.password)
        @Html.ValidationMessageFor(model => model.password)
    </div>

   <p>
        <input type="submit" value="Create"/>
        @{
if (!string.IsNullOrEmpty(ViewBag.error))
{
                <div style="color:Red">
                   @ViewBag.error 
                </div>           
}
        }
    </p>

</fieldset>

}

1 个答案:

答案 0 :(得分:0)

  

我很难看到如何在不进行会话变量的情况下保存页面状态

使用视图模型在帖子后面保留您的信息就可以了。

public class ConnectionViewModel
{
    public string AuthenticationType { get; set; }
    public string ConnectionString { get; set; }
    ...
}

public ActionResult Login()
{
    // pass in defaults 
    return View(new ConnectionViewModel
    {
        AuthenticationType = "Windows",
        ConnectionString = "..."
    });
}

[HttpPost]
public ActionResult Login(ConnectionViewModel viewModel)
{
    // pass view model back into view to retain values
    return View(viewModel);
}