ユーザーが入力する際に計算したいフィールドがいくつかあるフォーム/ Webページに次のフィールドがあります。フィールド単位原価がケースコスト/ケースサイズで計算されるMVC計算フィールドHtml.TextBoxFor Javascriptと2つの関数の競合
(画像を参照)。私は、次のコード
Casesizeテキストボックス
@Html.TextBoxFor(model => model.q_supplierproduct.q_casesize, "{0:#.#}", new { @class = "calc" })
ケースコストのテキストボックス
@Html.TextBoxFor(model => model.q_supplierproduct.q_casecost, "{0:#.#}", new { @class="calc"})
単位コストのTextbox
@Html.TextBoxFor(model=> model.q_unitcost, "{0:#.#}", new { @class = "calc" })
機能
と完全に機能していることを持っていますコントローラ
public class CalculateValuesController : Controller
{
[HttpPost]
public JsonResult CalculateUnitCost(double Q_casecost, double Q_casesize)
{
var result = Computation.GetUnitCost(Q_casecost, Q_casesize);
return Json(result.ToString("#.#"));
}
方法
public class Computation
{
public static double GetUnitCost(double Q_casecost, double Q_casesize)
{
double unitcostresult = Q_casecost/Q_casesize;
return unitcostresult;
}
だけで再び言及する予想通り、私はそれに応じてcasesiezとcasecostの値、unitcostフィールドの更新を変更した場合、このコードは、動作します。私が達成したいと思った次のことは、価格フィールドから単価フィールド(前に計算されたフィールド)を引いた値に基づいて利益フィールドを計算することでした。私はこれを添加して以降この点から、そのフィールドの2番目のスクリプトに加えて、コントローラ内の各計算と方法
<script>
var url = '@Url.Action("CalculateProfit", "CalculateValues")';
$('.calc').change(function() {
//get the values of the texboxes
var sellprice = $('#q_sellprice').val();
var unitcost = $('#q_unitcost').val();
//check if field entries are valid
if (sellprice == '' || unitcost == '' || isNaN(sellprice) || isNaN(unitcost)) { return; }
$.post(url, { Q_sellprice: sellprice, Q_unitcost: unitcost }, function (response) {
$('#q_profit').val(response);
});
});
を加えるようになった、単価フィールドは、(作業停止しますデータが入力されても更新はありません)、単位コストと価格フィールドに値を入力すれば、利益領域がそれに応じて計算されます。 (新しいスクリプトは、最初のスクリプトが目的どおりに機能しなくなる)。私はここで何が欠けていますか? 両方のスクリプトで共通の単価のフィールドが原因で問題になっていますか?どうすれば修正できますか?
なぜあなたはこれにajaxを使用していますか?あなたは単にJavaScriptで計算を行うことができます。あなたが必要とするすべての値を渡し、匿名のオブジェクトに2つの結果を返すだけで、それは1つの呼び出しである必要があります。 –
あなたの問題は 'CalculateUnitCost'を呼び出して' q_unitcost'の値を返すことですが、2番目のスクリプトはその時点であなたのサーバから返されていない 'q_unitcost'を取得しています。 –
まあ、一見して '$( '。calc')。changeは両方のスクリプトにとって冗長なので、あるブロックが別のブロックを上書きする場所は意味がありません。この計算は、AJAXのcall to actionメソッドを使用しなくても、vanilla JSを使用して実行することもできます。単一のメソッド呼び出しで両方のイベントをラップしてから計算を実行するだけです。 –