【问题标题】:How to generate textbox in Asp.Net Mvc projecct如何在 Asp.Net Mvc 项目中生成文本框
【发布时间】:2017-06-14 10:47:16
【问题描述】:

我将所有产品从数据库获取到我的 Asp.Net Mvc 视图。到目前为止,一切都很好。 我只是将文本框放在带有加号和减号按钮的每一行中,然后使用确定按钮来更新数据库中的数量。 但是每次点击都会转到第一个文本框。这是我的代码

  <table class="table">
        <tr>

            <th>
                Products

            </th>
            <th>
                Quantity

            </th>
            <th></th>
        </tr>

        @foreach (var item in Model)
        {
            <tr>

                <td>
                    @Html.DisplayFor(modelItem => item.Product)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Quantity)
                </td>

                <td> 
             <input type='text' name='qty@(item.ComputerId)' id='qty@(item.ProductId)'/>

                <Button class="btn btn-success btn-xs glyphicon glyphicon-plus" name="add" onclick='javascript: document.getElementById(qty@(item.ProductId)).value++;' value='+' />
                <Button class="btn btn-warning btn-xs glyphicon glyphicon-minus" name="subtract" onclick='javascript: subtractQty(qty@(item.ProductId));' value='-' />
                <button type="button" class="btn btn-primary" onclick="update();">Ok</button>
            </td> 

            </tr>
        }

    </table>

And JavaScript is:


   function subtractQty(name) {
            if (document.getElementById(name).value - 1 < 0)
                return;
            else
               document.getElementById(name).value--;
        }

但现在我得到了这个错误:未捕获的类型错误:无法读取 null 的属性“值”

【问题讨论】:

  • 您在哪里查看您的文本框?

标签: javascript asp.net-mvc textbox


【解决方案1】:

您好,您可以尝试以下代码:

查看代码:

  @int tempno=0;
  @foreach (var item in Model)
    {
        <tr>

            <td>
                @Html.DisplayFor(modelItem => item.Product)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Quantity)
            </td>

            <td> 
             <input type='text' name='qty@(tempno)' id='qty@(tempno)' />
                <Button class="btn btn-success btn-xs glyphicon glyphicon-plus" name="add" onclick='javascript: document.getElementById("qty").value++;' value='+' />
                <Button class="btn btn-warning btn-xs glyphicon glyphicon-minus" name="subtract" onclick='javascript: subtractQty();' value='-' /> |
                <button type="button" class="btn btn-primary" onclick="update();">Ok</button>


        </tr>
       @temp++
    }

jquery 代码:

var row = $(this).closest('tr');
 var product = row.find('td:eq(0)').text();
var quantity= row.find('td:eq(1)').text();

希望对你有帮助

谢谢

卡提克

【讨论】:

  • 感谢您的回复,但给了我关于 tempno 的错误说“名称 tempno 在当前上下文中不存在”..即使我这样写 @{int tempno=0};跨度>
  • 我已经更新了我的代码,请检查,现在我得到这个错误:未捕获的类型错误:无法读取 null 的属性“值”..我认为解决方案现在更接近了..请帮助..跨度>
  • Uncaught TypeError: Cannot read property 'value' of null 意味着您可能没有设置 id 以便函数查找该值,因此它可以检索它。解决方案:像这样检查: if (document.getElementById('cal_preview') != null) { str = document.getElementById("cal_preview").value; } 有用链接:stackoverflow.com/a/32758730/3397630
【解决方案2】:

编辑

你是对的,你的文本框可能有相同的id。因此,您可以先给它们不同的ids 来唯一标识每个文本框。

    @{
        int counter  = 0;
        foreach (var item in Model)
            {

             <input type='text' name='counter' id='counter' />
                            <Button class="btn btn-success btn-xs glyphicon glyphicon-plus" onclick='javascript: document.getElementById("counter").value++;' value='+' />
                            <Button class="btn btn-warning btn-xs glyphicon glyphicon-minus" onclick='javascript: subtractQty(counter);' value='-' /> 

       counter ++;
        }
   }

然后您必须更改您的 JavaScript 方法 subtractQty 才能知道应该将增量或减量应用于哪个文本框。

我可能会稍微调整您的方法以使用以下方法:

function subtractQty(textboxId) {
            if (document.getElementById(textboxId).value - 1 < 0)
                return;
            else
                document.getElementById(textboxId).value--;
        }

【讨论】:

  • @jamiedang 感谢您的回复,但它们与从数据库生成的产品一样多,我怎么知道它们会有多少和名称。不应该像 Munzer 那样回应吗?再次感谢您
  • 这就是为什么我将名称和 id 更改为 counter,因为在每次迭代中,计数器都会改变,使每个 texbox 都是唯一的。产品数量不是问题
  • 再次感谢您,但仍然是同样的问题。一切都转到第一个。
  • 啊,你是对的,我会尽快更正,这只是我使用的 ID。
  • 现在我得到 500(内部服务器错误)错误链接.. 像这样..localhost:25411/home/GetProducts?id=2&_=1497305386795 应该是localhost:25411/home/GetProducts?id=2 我不知道其余的从哪里来&_=1497305386795
【解决方案3】:

您应该为您的文本框提供唯一的名称和 ID,您可以通过循环执行此操作,例如将项目 ID 附加到 qty 像这样

 <input type='text' name='qty@Item.ID' id='qty@Item.ID' /> 

请注意,我假设您的 id 字段名称是不正确的 ID,请将其更改为您的字段名称。

然后在您的 javascript 函数中,添加一个参数,其名称为 qty@Item.ID,使用此参数按名称获取元素并相应地更新其值

<Button class="btn btn-warning btn-xs glyphicon glyphicon-minus" name="subtract" onclick="javascript: subtractQty(@Item.ID);" value='-' />

你的js函数

function subtractQty(id) {
            if (document.getElementById("qty"+id.toString()).value - 1 < 0)
                return;
            else
                document.getElementById("qty"+id.toString()).value--;
        }

【讨论】:

  • 感谢您的回复。我的 Id 字段名称是 tem.ProductId,我将其更改为 name='qty@item.ProductId' 但现在单击这些 + 和 - 按钮时没有任何操作。当我按下 F12“未捕获的类型错误:无法读取 null 的属性‘值’”时出现此错误。再次感谢您!
  • 您是否将名称参数传递给您的函数?
  • 检查我的编辑,我添加了传递参数名称,可能它丢失了
  • 我已经更新了我的代码,请检查,现在我得到这个错误:未捕获的类型错误:无法读取 null 的属性“值”..我认为解决方案现在更接近了..请帮助..跨度>
  • 你好乔纳斯,检查我的更新,也许传递的参数不正确,现在试试这个方法,请告诉我
猜你喜欢
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 2014-11-26
  • 1970-01-01
  • 2018-07-23
  • 2020-05-07
相关资源
最近更新 更多