SelectListItem

本文展示如何在ASP.NET MVC中使用ActionResultHtmlHelper整合HTML选择列表与视图数据,实现动态填充下拉菜单。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 #region HtmlHelper
        public ActionResult HtmlHelper()
        {

            ViewData["City"] = new List<SelectListItem>()
            {
                new SelectListItem(){Selected = false,Text = "北京",Value="1"},
                new SelectListItem(){Selected = true,Text = "上海",Value="2"},
                new SelectListItem(){Selected = false,Text = "广州",Value="3"}
            };

            ViewData["Demo"] = "你好,传智播客";

            return View();
        }
        #endregion
using Newtonsoft.Json.Linq; using Newtonsoft.Json; using PartSizeInfo.Models; using PartSizeInfo.ViewModels; using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Net.Http.Headers; using System.Net.Http; using System.Threading.Tasks; using System.Web; using System.Web.Mvc; using System.IO; namespace PartSizeInfo.Controllers { public class HomeController : Controller { JJLDBEntities db = new JJLDBEntities(); public HomeController() { } // 新增:获取合同号对应的款号(AJAX调用) [HttpGet] public JsonResult GetProductCodesByContract(string contractNumber) { var productCodes = GetProductCodes(contractNumber); return Json(productCodes, JsonRequestBehavior.AllowGet); } public ActionResult Index() { var model = new UploadViewModel { ContractNumbers = GetContractNumbers(), ProductCodes = GetProductCodes() }; return View(model); } public ActionResult About() { ViewBag.Message = "Your application description page."; return View(); } public ActionResult Contact() { ViewBag.Message = "Your contact page."; return View(); } private List<SelectListItem> GetContractNumbers() { // 从数据库获取合同号 return db.V_orderSizeList .Select(v => v.order_no) .Distinct() .Select(c => new SelectListItem { Text = c, Value = c }) .ToList(); } // 获取款号(根据合同号过滤) private List<SelectListItem> GetProductCodes(string contractNumber = null) { var query = db.V_orderSizeList.AsQueryable(); // 如果有合同号参数,则过滤 if (!string.IsNullOrEmpty(contractNumber)) { query = query.Where(v => v.order_no == contractNumber); } return query .Select(v => v.style_no) .Distinct() // 添加去重 .Select(p => new SelectListItem { Text = p, Value = p }) .ToList(); } [HttpPost] [ValidateAntiForgeryToken] public async Task<ActionResult> Upload(UploadViewModel model) { try { // 1. 验证模型 if (!ModelState.IsValid) { model.ContractNumbers = GetContractNumbers(); model.ProductCodes = GetProductCodes(); return View("Index", model); } // 2. 保存主记录 var masterRecord = new t_PartSizeM { orderNo = model.ContractNumber, styleNo = model.ProductCode, createTime = DateTime.Now, fileurl = model.ExcelFile.FileName }; db.t_PartSizeM.Add(masterRecord); await db.SaveChangesAsync(); var masterId = masterRecord.id; // 3. 调用API解析Excel var apiResponse = await CallExcelApi(model.ExcelFile); // 4. 检查API响应 if (!apiResponse.Success) { throw new Exception($"API解析失败: {apiResponse.Error}"); } // 5. 执行存储过程 ExecuteStoredProcedure(masterId, model.ContractNumber, model.ProductCode, apiResponse.Data); TempData["SuccessMessage"] = "数据导入成功!"; return RedirectToAction("Index"); } catch (Exception ex) { ModelState.AddModelError("", $"处理文件时出错: {ex.Message}"); model.ContractNumbers = GetContractNumbers(); model.ProductCodes = GetProductCodes(); return View("Index", model); } } private async Task<ApiResponse> CallExcelApi(HttpPostedFileBase file) { using (var client = new HttpClient()) { // 重置文件流位置到开头 file.InputStream.Seek(0, SeekOrigin.Begin); // 创建多部分表单数据 var form = new MultipartFormDataContent(); // 添加文件 var fileContent = new StreamContent(file.InputStream); fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse(file.ContentType); form.Add(fileContent, "File", file.FileName); // 添加其他参数 form.Add(new StringContent(""), "SheetName"); form.Add(new StringContent("true"), "IncludeHeader"); // 发送请求 var response = await client.PostAsync("http://10.20.10.3:8099/api/Excel/upload", form); // 解析响应 var responseContent = await response.Content.ReadAsStringAsync(); // 解析为JObject以访问嵌套属性 var responseObject = JObject.Parse(responseContent); return new ApiResponse { Success = responseObject["success"]?.Value<bool>() ?? false, Error = responseObject["message"]?.Value<string>() ?? responseObject["error"]?.Value<string>(), Data = responseContent }; } } private void ExecuteStoredProcedure(int masterId, string contractNumber, string productCode, JToken apiData) { // 准备存储过程参数 var parameters = new List<SqlParameter> { new SqlParameter("@MasterId", masterId), new SqlParameter("@ContractNumber", contractNumber), new SqlParameter("@ProductCode", productCode), new SqlParameter("@JsonData", apiData) }; // 执行存储过程 db.Database.ExecuteSqlCommand("EXEC dbo.ImportExcelData @MasterId, @ContractNumber, @ProductCode, @JsonData", parameters.ToArray()); } // API响应模型 public class ApiResponse { public bool Success { get; set; } public string Error { get; set; } public JToken Data { get; set; } } } }看下我这段代码 报错了 System.ArgumentException:“不存在从对象类型 Newtonsoft.Json.Linq.JValue 到已知的托管提供程序本机类型的映射
最新发布
07-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值