zoukankan      html  css  js  c++  java
  • MVC入门小示例淘宝商品的搜索和价格筛选

         五一前后一直在忙安卓的东西,直到现在终于有机会喘口气了,于是就抽空写了这篇博文,来记录我之前学习MVC一周后所写的小例子:搜索淘宝商品并对商品进行价格筛选。

         先上开始界面:

       

         这个界面的源码如下:

    @{
        ViewBag.Title = "主页";
    }
    
     <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
     <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
    
    @using (Html.BeginForm()) {
        <fieldset>
    
            <legend>Search</legend>
            <div id ="editor-field">
                <p>搜索商品 @Html.TextBox("keyword")</p> 
                <p>价格上限 @Html.TextBox("max")</p>
                <p>价格下限 @Html.TextBox("min")</p>
            </div>
        </fieldset>
            <p>
                <input type="submit" value="Search" />
            </p>
    }

          值得注意的是我标为红色的代码,TextBox提供用户输入,并且提交用户输入,括号里的"keyword"是用来标识所提交的内容,方便我们从提交的表单中提取出用户的输入。
          然后就是我们的主程序:

     public class HomeController : Controller
        {
            string keyword;
            double max;
            double min;
            //
            // POST: /Index/
            public ActionResult Index(FormCollection values)
            {
                keyword = values["keyword"];
                if (values["max"] != null)
                {
                    max = double.Parse(values["max"]);
                }
                if (values["min"] != null)
                {
                    min = double.Parse(values["min"]);
                }
                if (keyword == null)
                {
    
                    return View();
                }
                else
                {
                    List<Goods> goodsList = new List<Goods>();
                    GoodsInformation information = new GoodsInformation(keyword, max, min);
                    List<string> imgs = information.getImg();
                    List<string> hrefs = information.getHref();
                    List<string> prices = information.getPrice();
                    for (int i = 0, len = prices.Count; i < len; i++)
                    {
                        Goods goods = new Goods();
                        goods.Imge = imgs.ElementAt(i);
                        goods.href = hrefs.ElementAt(i );
                        goods.Name = keyword;
                        goods.Price = double.Parse(prices.ElementAt(i));
                        goodsList.Add(goods);
                    }
                    return View("Search", "_Layout", goodsList);
                }
            }
        }

          注意Index操作的参数,也就是我标为红色的部分,它说明我们这个操作是提取所POST的表单并进行处理,所以最好注释说明这是一个POST请求。

           我们提交的表单其实就是键值对的集合,当然,我们在使用的时候,必须注意非空的判断,因为用户可能什么也没输入就提交了。这里我还没有使用验证,当用户没有输入关键字,就会重新显示搜索界面。如果用户输入相关信息并且提交,就会跳转到另一个View---Search。

           我们来输入一些关键字吧!

         

           
         看看我们的搜索结果是怎样的:

        

          抱歉,由于我没有时间对显示的界面进行排版,所以暂时无法提供完整的商品列表,只好截取出一部分出来。

          嗯,MG 独角兽还是相对较贵的。

          Search的view的源码如:

    @model List<TaoBaoShop.Models.Goods>
    
    @{
        ViewBag.Title = "搜索";
    }
    <h3>搜索 @Model.ElementAt(0).Name 的结果列表:</h3>
    <ul>
        @foreach (var m in Model)
        { 
          <li>
            <a href="@m.href">
              <span><img alt="@m.Name" src="@m.Imge"/></span><br />
              <span>总价:@m.Price</span></a><br /><br />
         </li>
        }
     </ul>    

          我们在操作中传递一个模型给相应的视图,然后就可以在视图中使用该模型。
          我们的商品列表的界面是根据价格进行排列的,这样的实现并不难,只要在提取商品价格西信息的同时进行排序就可以了。

          要想呈现商品列表,最主要的部分就是商品信息的提取:

    string handleUrl(string content)
            {
                string strHtml = "";
                WebResponse wrp = null;
                try
                {
                    WebRequest wrq = WebRequest.Create(content);
                    wrp = wrq.GetResponse();
                }
                catch (WebException e)
                {
                    throw e;
                }
                catch (Exception e)
                {
                    throw e;
                }
                finally
                {
                    if (wrp != null)
                    {
                        StreamReader sr = new StreamReader(wrp.GetResponseStream(), Encoding.GetEncoding("gbk"));
                        strHtml += sr.ReadToEnd();
                        sr.Close();
                        wrp.Close();
                    }
                    else
                    {
                        mIsLeft = false;
                    }
                }
                return strHtml;
            }

          得到淘宝网页内容后,就是利用正则表达式对商品信息进行提取了。
          例子非常简单,还请各位见笑。

       

  • 相关阅读:
    MongoDB
    Mac下将Python2.7改为Python3
    Kafka
    Server 基础概念 备忘
    应用内支付
    Sign in with apple
    Linux三剑客grep/sed/awk
    React-Native中使用到的一些JS特性
    Date Picker控件:
    Picker View控件:
  • 原文地址:https://www.cnblogs.com/wenjiang/p/3062918.html
Copyright © 2011-2022 走看看