五一前后一直在忙安卓的东西,直到现在终于有机会喘口气了,于是就抽空写了这篇博文,来记录我之前学习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; }
得到淘宝网页内容后,就是利用正则表达式对商品信息进行提取了。
例子非常简单,还请各位见笑。