Извините, если мой вопрос слишком простой, я просто новый для mvc без опыта в javascript.MVC Расчетное поле и форматирование полей
1- Я пытаюсь добавить вычисляемое поле на мой взгляд, не имела успеха у меня есть следующий класс
public class TaxCalculation
{
[Required]
[DisplayName("Init")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:#.#}")]
public double InitVlaue { get; set; }
[Required]
[DisplayName("Reg")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:#.#}")]
public double RegValue { get; set; }
[DisplayName("Enga")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:#.#}")]
public double InitEnga
{
get { return CommonComputation.CalcuEnga(InitVlaue, RegValue); }
}
}
CommonComputation.CalcuEnga функция:
public static double CalcuEnga(double InitVlaue, double RegValue)
{
double V_Et = (0.02 * 0.225 - 1) * Math.Log(0.225/(100 - 0.225));
double V_En = (0.02 * 0.711 - 1) * Math.Log(0.711/(100 - 0.711));
double mk = Math.Round(RegValue/InitVlaue * 100, 3);
double V_Ep = (0.02 * InitVlaue - 1) * Math.Log(InitVlaue/(100 - InitVlaue));
double F = Math.Round((InitVlaue - 0.225)/(0.711 - 0.225), 5);
double S = Math.Round(((V_Ep) + (F - 1) * V_Et - F * V_En), 5);
double ceq = Math.Round(F + 1.53 * S, 5);
return Math.Round(mk * ceq, 3);
}
мой взгляд,
<div class="editor-label">
@Html.LabelFor(model => model.InitVlaue)
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.InitVlaue,new {style="width:50px;"})
@Html.ValidationMessageFor(model => model.InitVlaue)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.RegValue)
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.RegValue,new {style="width:50px;"})
@Html.ValidationMessageFor(model => model.RegValue)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.InitEnga)
</div>
<div class="editor-field">
@Html.TextBoxFor(x=> x.InitEnga,new {name="initEngaTextBox",style="width:50px;",@readonly="readonly"})
@Html.ValidationMessageFor(model => model.InitEnga)
</div>
Iwant, когда пользователь вводит любое из первых двух полей (InitVlaue
или RegValue
) заполнено InitEnga
обновлено Я попытался добавить поле напрямую или вызвать функцию, которая делает расчет без каких-либо успехов. Я искал и нашел 1000 ответов, используя такие вещи, как ajax, Knockout ... и т. Д. У меня нет опыта с javascript вообще. Есть ли простой способ решить эту проблему?
2- во всем текстовом поле, хотя я указал формат [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:#.#}")]
, я все еще вижу значение 0, любая идея, что не так?
Большое спасибо
Во-первых, ваш 'DisplayFormatAttribute' соблюдается только при использовании' EditorFor() 'и' DisplayFor() '(его неприменимо при использовании' TextBoxFor() '). Во-вторых, если вы хотите отреагировать на события на стороне клиента, тогда вам нужно использовать javascript/jquery –
Невозможно достичь этого, используя чистую серверную часть MVC. Если вы хотите, чтобы третье значение было пересчитано при обновлении первых двух полей динамически, вам нужно будет использовать javascript. И если функция, выполняющая расчет, является функцией на стороне сервера, вам необходимо будет отправить эти значения на сервер, который может быть достигнут с помощью AJAX.Поэтому я бы порекомендовал вам начать изучение javascript, если вы не знакомы с ним. –
Код MVC на C# выполняется на сервере, а не на клиенте. Таким образом, когда вы изменяете значение для других 2, третий не обновляется, так как никакого вызова сервера не производится. Вам нужен простой Javascript, который либо выполнит расчет на стороне клиента, либо отправит измененные значения обратно на сервер и получит обновленные значения и покажет обновленное значение в пользовательском интерфейсе. Поскольку это выглядит как простой расчет, я порекомендую сделать калькулятор на клиенте с помощью javascript. – Daredevil