2013-06-24 132 views
1

我很努力地看到如何保存一个页面状态而不做一个会话变种。 我有一个页面,其中包含一个改变页面状态的按钮,在发布后,视图可能返回,但处于错误状态。我试过ViewBag,这不能在java范围内设置。我需要一个解决方案,以节省的进行AuthType值..保存页面状态mvc4

@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> 

}

回答

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); 
} 
+0

是的,我认为这会工作,只是想我可能已经错过了MVC的新东西。 –