Как получить значения нескольких txtBoxes и отобразить сумму на новой странице?
На Page1.aspx у меня есть 3 txtBox с валидаторами сравнения, которые обеспечивают тип валюты.
На Page2.aspx у меня есть еще одно текстовое поле с именем txtResult, задачей которого является отображение суммы трех других txtBoxes при нажатии btnCalculate на Page1.
Проблема: я не могу заставить 3 txtBoxes обрабатываться как double, а не как строки. Если значения txtBox равны 1, 3 и 8, txtResult будет 138, а не 12.
Я попытался разобрать, но это не позволило не скомпилировать.
Код за Page1:
protected void btnCalculate_Click(object sender, EventArgs e)
{
if (IsValid)
{
Server.Transfer("Page2.aspx");
}
}
Код за Page2:
if (!IsPostBack)
{
Page lastPage = (Page)Context.Handler;
txtResult.Text = ((TextBox)lastPage.FindControl("txtGross")).Text
+ ((TextBox)lastPage.FindControl("txtValueOfAssets")).Text
+ ((TextBox)lastPage.FindControl("txtInvestments")).Text;
}
Попытка использовать TryParse
:
txtResult.Text =
double.TryParse(((TextBox)lastPage.FindControl("txtGross")).Text, out gross);
Ошибки с:
Не может неявно скрыть bool в строку
3 ответа
Вы можете использовать Double.Parse(текст), чтобы преобразовать текст в двойной. Так, например:
txtResult.Text = (Double.Parse(((TextBox)lastPage.FindControl("txtGross")).Text)
+ Double.Parse(((TextBox)lastPage.FindControl("txtValueOfAssets")).Text)
+ Double.Parse(((TextBox)lastPage.FindControl("txtInvestments")).Text)).ToString();
Обратите внимание, что мне нужно было обернуть все это в.ToString(), чтобы преобразовать ответ обратно в текст, чтобы его можно было присвоить txtResult.Text
, Я дал ответ на длинном утверждении, так как вопросы использовали одно длинное утверждение, но обычно я преобразовываю каждое из значений в двойное и помещаю их в отдельные двойные переменные, затем добавляю их в другое утверждение и, наконец, в еще одно утверждение, которое я конвертируем ответ в строку и помещаем его в текстовое поле. Мне кажется, что такой подход с несколькими утверждениями легче читать и усваивать, но это всего лишь личные предпочтения.
Текстовое свойство TextBox является типом String, поэтому добавление их приведет к объединению. Вам необходимо преобразовать значение Text в двойное значение перед добавлением.
Простой способ конвертации Convert.ToDouble("")
так что попробуйте это:txtResult.Text = Convert.ToDouble(((TextBox)lastPage.FindControl("txtGross")).Text)
+ Convert.ToDouble(((TextBox)lastPage.FindControl("txtValueOfAssets")).Text)
+ Convert.ToDouble(((TextBox)lastPage.FindControl("txtInvestments")).Text);
Поскольку ваши значения являются строками, они обрабатываются как строки и объединяются.
Вам необходимо сначала преобразовать эти значения в Double, а затем выполнить добавление.
В этом посте рассказывается о нескольких методах преобразования в double: преобразование строки в double в C#
По сути, вы можете использовать метод Convert.ToDouble() для преобразования вашего текстового поля Text value в double.
Convert.ToDouble(((TextBox)lastPage.FindControl("txtValueOfAssets")).Text)
Наилучшим подходом было бы заглянуть в метод TryParse(), чтобы гарантировать, что ваш код не прервется при подаче нечисловой строки.