Я создаю веб-форму с помощью Visual Studio 2010, и у меня есть страница .aspx, которая захватывает некоторые пользовательские данные и сохраняет их в базе данных. На странице есть две кнопки, одна для пользователя для сохранения значений (должна быть добавлена в список здесь), а вторая - для фактического сохранения их в базе данных в соответствующем формате. Мой код ниже:List.count всегда сбрасывается до 0 после добавления элемента
namespace TabletApplication.HomePages
{
public partial class Record : System.Web.UI.Page
{
List<ReadingModel> paramList;
protected void Page_Load(object sender, EventArgs e)
{
paramList = new List<ReadingModel>();
}
public class ReadingModel
{
public int paramId { get; set; }
public string value { get; set; }
public Boolean pass { get; set; }
public string comment { get; set; }
}
protected void btnUpdate_Click(object sender, EventArgs e)
{
// Get an instance of the Button
Button UpdateButton = (Button)sender;
// Get the ID of the current record from the CommandArgument
int intID = Convert.ToInt32(UpdateButton.CommandArgument);
bool goodValue;
using (TabletApplicationEntities serverContext = new TabletApplicationEntities())
{
// Get the value and comment
TextBox Reading =
(TextBox)UpdateButton.Parent.FindControl("txtReading");
TextBox Comment =
(TextBox)UpdateButton.Parent.FindControl("txtComment");
//Get min and max values
Label Min = (Label)UpdateButton.Parent.FindControl("minValLabel");
Label Max = (Label)UpdateButton.Parent.FindControl("maxValLabel");
double minVal = Convert.ToDouble(Min.Text);
double maxVal = Convert.ToDouble(Max.Text);
int readingVal = -1;
try
{
readingVal = Convert.ToInt32(Reading.Text);
goodValue = true;
}
catch
{
Reading.Text = "Invalid entry: Must enter a number";
Reading.BackColor = System.Drawing.Color.Red;
Reading.ForeColor = System.Drawing.Color.Blue;
goodValue = false;
}
if (goodValue)
{
// Update the record
ReadingModel Result = new ReadingModel();
Result.comment = Comment.Text;
Result.value = Reading.Text;
Result.paramId = intID;
if (readingVal > minVal && readingVal < maxVal && readingVal >= 0)
{
Result.pass = true;
}
else if (readingVal < minVal || readingVal > maxVal)
{
Result.pass = false;
}
else
{
Reading.Text = "UNKNOWN ERROR: Try again";
Reading.BackColor = System.Drawing.Color.Red;
Reading.ForeColor = System.Drawing.Color.Blue;
}
paramList.Count();
paramList.Add(Result);
paramList.Count();
}
}
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
using (TabletApplicationEntities serverContext = new TabletApplicationEntities())
{
// Create a new Reading
foreach (var para in paramList)
{
Reading objReading = new Reading();
// Set values
objReading.ParamID = para.paramId;
objReading.comment = para.comment;
objReading.date = System.DateTime.Now;
objReading.pass = para.pass;
objReading.reading1 = para.value;
// Add object
serverContext.Readings.AddObject(objReading);
}
// Save changes
serverContext.SaveChanges();
paramList.Clear();
}
}
}
}
Когда пользователь нажимает на первую кнопку, функция btnUpdate_Click
работает должным образом, и добавляет новый Result
к paramList
. С точками останова на двух paramList.Count()
я вижу, что счетчик равен 0 до того, как будет добавлен результат, и 1 после этого, как и должно быть. Однако, когда нажата кнопка сохранения, функция btnSubmit_Click
запускается и полностью пропускает цикл for, потому что число paramList
равно 0. Есть идеи?
EDIT 1:
Я попытался добавить ViewState в Page_Load, но я считаю, что это не работает, потому что список не является «serializeable», но я не знаю, как это исправить. Это то, что я добавил:
List<ReadingModel> paramList;
protected void Page_Load(object sender, EventArgs e)
{
if (ViewState["paramList"] != null)
{
paramList = (List<ReadingModel>)ViewState["paramList"];
}
else
{
paramList = new List<ReadingModel>();
}
}
подсказки: страница создается для каждого запроса –
Так от этого, вариант я найденные помещают объекты в сеанс для текущего пользователя, что не кажется идеальным, или использовать viewstate. Представление выглядит как способ пойти, но я очень новичок в таких вещах. Как мне реализовать что-то подобное? – user2569124