public class GenerateLogOnModel
{
List<LogOnModel> data;
public List<LogOnModel> Data
{
get { return data; }
set { data = value; }
}
public GenerateLogOnModel()
{
data = new List<LogOnModel>();
data.Add( new LogOnModel
{
UserName = "vasya",
Password = "12345",
RememberMe = true
});
data.Add( new LogOnModel
{
UserName = "kolya",
Password = "11111",
RememberMe = true
});
}
}
Не понимаю чего то принципиального в ASP.NET MVC
получаю 2 строчки из модели
при нажатии на EDIT попадаю в форму редактирования
редактирую и жму SUBMIT
при открытии MyIndex вижу свои изменения,
но не могу понять как они сохраняються в объекте GenerateLogOnModel (DB)???
ведь нету ViewState!
почему static MyController() вызываеться только 1 раз??
ведь каждый раз это новый запрос!
И даже при вызове RedirectToAction("MyIndex"); я не передаю туда измененую model!
Как он показывает новые данные? откуда получил?
---Model---
Код
Код:
---Controller---
Код
Код:
public class MyController : Controller
{
static GenerateLogOnModel DB;
static MyController()
{
DB = new GenerateLogOnModel();
}
public ActionResult MyIndex()
{
var model = DB.Data;
return View(model);
}
public ActionResult Edit(string UserName)
{
var model = DB.Data.Find(f => f.UserName == UserName.ToString());
return View(model);
}
[HttpPost]
public ActionResult Edit(string UserName, FormCollection collection)
{
var model = DB.Data.Find(f => f.UserName == UserName.ToString());
if (TryUpdateModel(model))
{
return RedirectToAction("MyIndex");
}
return View(model);
}
}
{
static GenerateLogOnModel DB;
static MyController()
{
DB = new GenerateLogOnModel();
}
public ActionResult MyIndex()
{
var model = DB.Data;
return View(model);
}
public ActionResult Edit(string UserName)
{
var model = DB.Data.Find(f => f.UserName == UserName.ToString());
return View(model);
}
[HttpPost]
public ActionResult Edit(string UserName, FormCollection collection)
{
var model = DB.Data.Find(f => f.UserName == UserName.ToString());
if (TryUpdateModel(model))
{
return RedirectToAction("MyIndex");
}
return View(model);
}
}
---Views---
[myindex.cshtml]
Код
Код:
@model IEnumerable<MvcApplication1.Models.LogOnModel>
@{
ViewBag.Title = "MyIndex";
}
<h2>MyIndex</h2>
<table>
@foreach (var item in Model)
{
using(Html.BeginForm()) {
<tr>
<td>
@Html.ActionLink("Edit","Edit", new { UserName = item.UserName})
</td>
<td>
@item.UserName
</td>
<td>
@item.Password</td>
</tr>
}
}
</table>
@{
ViewBag.Title = "MyIndex";
}
<h2>MyIndex</h2>
<table>
@foreach (var item in Model)
{
using(Html.BeginForm()) {
<tr>
<td>
@Html.ActionLink("Edit","Edit", new { UserName = item.UserName})
</td>
<td>
@item.UserName
</td>
<td>
@item.Password</td>
</tr>
}
}
</table>
[edit.cshtml]
Код
Код:
@model MvcApplication1.Models.LogOnModel
@{
ViewBag.Title = "Edit";
}
<h2>Edit</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>LogOnModel</legend>
<div class="editor-label">
@Html.LabelFor(model => model.UserName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.UserName)
@Html.ValidationMessageFor(model => model.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Password)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Password)
@Html.ValidationMessageFor(model => model.Password)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.RememberMe)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.RememberMe)
@Html.ValidationMessageFor(model => model.RememberMe)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@{
ViewBag.Title = "Edit";
}
<h2>Edit</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>LogOnModel</legend>
<div class="editor-label">
@Html.LabelFor(model => model.UserName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.UserName)
@Html.ValidationMessageFor(model => model.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Password)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Password)
@Html.ValidationMessageFor(model => model.Password)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.RememberMe)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.RememberMe)
@Html.ValidationMessageFor(model => model.RememberMe)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
Цитата: sealmu
почему static MyController() вызываеться только 1 раз??
ведь каждый раз это новый запрос!
Он вызыватся один раз при инициализации класса в домене приложения. HTTP-запросы тут ни при чем.