代码之家  ›  专栏  ›  技术社区  ›  stackunderflow

获取HtmlHelper.textbox值作为查询字符串mvc

  •  0
  • stackunderflow  · 技术社区  · 10 年前

    我有以下想法,我正在努力实现

    @foreach (var item in Model)
    {
    <div>User: @item.Name<br />
        Scores: @item.scores<br />
        @Html.TextBox("lastvisit");
        @Html.ActionLink("Update item", "updateMyItem", new  { name = item.Name, lastvisit=?????  })
        </div>
    }
    

    我看过这个SO问题 Pass text in query string 但那不是我想要的。。

    所以我的问题是。。 在上面的代码中,如何将(????)替换为文本框的值(lastvisit) 并将该值作为查询字符串发送到操作链接的URL中??

    注意,由于我自己的原因,我选择不使用webform,我知道如何使用webform.submit(),但我主要关心的是如何提取@HTMLhelper.textbox()的值。。

    :)

    3 回复  |  直到 4 年前
        1
  •  1
  •   Nilesh    10 年前

    类似这样的事情可能会有所帮助。为此,您需要为链接和文本框呈现唯一的IDS。

    这里有一个例子

    具有简单模型的操作方法

    public ActionResult Index(int? id)
    {
        List<MyModel> mod = new List<MyModel>() { 
            new MyModel { SelectedValue = 1 } ,
            new MyModel {SelectedValue = 2},
            new MyModel {SelectedValue = 3}
        };
            return View(mod);
    }
    

    这是带有脚本的视图。

    @model List<MVC3Stack.Models.MyModel>
    @{
        ViewBag.Title = "Home Page";
        var i = 1;    
    }
    <h2>@ViewBag.Message</h2>
    <script type="text/javascript">
        $(document).ready(function () {
            var lastVisits = $("input[id*='lastVisit']");
            $(lastVisits).each(function () {
                var i = this.id.substring(this.id.length - 1);
                var link = $("[id='testLink" + i + "']");
                if (link) {
                    var _href = $(link).attr("href");
                    $(link).attr("href", _href + "&lastvisit=" + $(this).val());
                }
            });
        });
    
    </script>
    @foreach (var item in Model)
    {
        @Html.TextBox("lastVisit" + i, item.SelectedValue )
        @Html.ActionLink("TestLink", "Index", "Home", new { id = "testLink" + i });
       <br />
       i++;
    }
    <input type="button" value="GetFile" id="getFile" />
    

    这是一个链接已更改的快照

    Sample output

    希望这有帮助。

    编辑

    我的错。这里是可以实现此功能的更新javascript。

    $(document).ready(function () {
        var lastVisits = $("input[id*='lastVisit']");
    
        $(lastVisits).each(function () {
            $(this).change(function () {
                var i = this.id.substring(this.id.length - 1);
                var link = $("[id='testLink" + i + "']");
                if (link) {
                    var _href = $(link).attr("href");
                    $(link).attr("href", _href + "?lastvisit=" + $(this).val());
                }
            });
        });
    });
    
        2
  •  0
  •   stackunderflow    10 年前

    好的,Nilesh,我会回答我自己的问题。。但我会欺骗你的解决方案,因为这是鼓舞人心的。。提前用乙醇

    <script type="text/javascript">
        $(document).ready(function () {
            var myMainPath = "updateMyItem";
    
            $("a").each(function(){
              var name =$(this).parent("div").child("#itemName").val();
              var visit = $(this).parent("div").child("#lastvisit").val();
              $(this).attr('href', myMainPath +'?name=' + name + '&lastVisit='+ visit);
    
    
            });
        });
    
    </script>
    
    @foreach (var item in Model)
    {
    <div>User: <span id="itemName">@item.Name</span><br />
        Scores: @item.scores<br />
        @Html.TextBox("lastvisit", new { id="lastvisit"});
        <a  href=""> Update item </a>
    
        </div>
    }
    

    你可以看到它可以通过javascript实现,但我错误地认为你可以通过服务器上的Razor操纵它。。

        3
  •  0
  •   strongmmc    8 年前

    我知道这篇文章已经过时了,但由于asp.net/MVC/网站,我刚刚开始学习MVC,在教程中我也遇到了类似的问题。我的索引操作需要2个参数来定义视图中显示的一组记录的排序和过滤(通过子字符串的macthing)。我的问题是,我无法对已筛选的子集进行排序,因为调用了视图,但在单击标题的链接激活排序后,不会传递任何用于筛选的参数。

    @* Index.cshtml *@
        @using (Html.BeginForm())
        {
          <p>
          Find by name: @Html.TextBox("SearchString")
          <input type="submit" value="Search" />
          </p>
        }
        . . .
        <!-- header -->
        <table><tr><th>
          @Html.ActionLink("Last Name", "Index", new { sortOrder = ViewBag.NameSortParm })
        </th>
    
    . . .
    
    //controller.cs
        public ActionResult Index(string sortOrder, string searchString){...}
    

    我以为我需要访问TextBox,但显然我只需要使用提供的ViewBag对象,正如本例中已经看到的那样!

    @* Index.cshtml *@
        @using (Html.BeginForm())
        {
          <p>
          Find by name: @Html.TextBox("SearchString")
          <input type="submit" value="Search" />
          </p>
        }
        . . .
        <!-- header -->
        <table><tr><th>
          @Html.ActionLink("Last Name", "Index", new { sortOrder = ViewBag.NameSortParm, searchString = ViewBag.SearchString })
        </th>
    
    . . .
    
    //controller.cs
        public ActionResult Index(string sortOrder, string searchString)
        {
          ViewBag.SearchString = searchString;
          . . .  
        }
    

    也许类似的行为可以用来解决这篇文章的问题,我不知道。