1

按照这里的例子:文件上传的嵌入式用户控件.ascx文件

http://www.highoncoding.com/Articles/689_Uploading_and_Displaying_Files_Using_ASP_NET_MVC_Framework.aspx

我有我使用的是作为一个编辑模板的.ascx文件,我想用这种方法来上传文件,我.ascx文件看起来像这样

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MHNHub.Models.ScrollerLink>" %> 
<script type="text/javascript"> 
    $(function() { 
     $("#dialog").dialog({ 
      bgiframe: true, 
      height: 160, 
      width: 400, 
      modal: true, 
      autoOpen: false, 
      resizable: true 
     }) 
    }); 

    </script> 

<div class="editor-label"> 
    Content Title 
</div> 
<div class="editor-field"> 
    <%: Html.TextBoxFor(model => model.ContentTitle) %> 
    <%: Html.ValidationMessageFor(model => model.ContentTitle) %> 
</div> 

<div class="editor-label"> 
    Content Description 
</div> 
<div class="editor-field"> 
    <%: Html.TextBoxFor(model => model.ContentDescription) %> 
    <%: Html.ValidationMessageFor(model => model.ContentDescription)%> 
</div> 

<div class="editor-label"> 
    Current Image 
</div> 
<img src="<%: Model.ImageUrl %>" /> 
<div class="editor-field"> 
    <div id="dialog" title="Upload Image"> 
     <% using (Html.BeginForm("Upload", "HomeScroller", FormMethod.Post, new { enctype="multipart/form-data" })) 
    { %> 

    Select a file: <input type="file" name="fileUpload" /> 

    <input type="submit" value="Upload" /> 

    <% } %> 
    </div> 
    <a href="#" onclick="jQuery('#dialog').dialog('open'); return false">Upload Image</a> 
</div> 

<div class="editor-label"> 
    URL Link 
</div> 
<div class="editor-field"> 
    <%: Html.TextBoxFor(model => model.ImageLink) %> 
    <%: Html.ValidationMessageFor(model => model.ImageLink) %> 
</div> 

我的控制器被称为HomeScrollerController和动作方法被调用上传,我的控制器和培训相关行动都显示如下

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using MHNHub.Models; 
using MHNHub.ViewModels; 
using System.Text.RegularExpressions; 
using System.IO; 

namespace MHNHub.Controllers 
{ 
    public class HomeScrollerController : Controller 
    { 


      // 
    // GET: /HomeScroller/Create 

    public ActionResult Create() 
    { 
     var scrollerLink = new ScrollerLink(); 



     var viewModel = new HomeScrollerViewModel() 
     { 
      ScrollerLink = scrollerLink  
     }; 

     return View(viewModel); 
    } 

    private ScrollerLink GenerateScrollerLinkImageID(ScrollerLink scrollerLink) 
    { 
     var scrollerLinkList = dataContext.ScrollerLinks.ToList(); 

     int count = 1; 

     foreach (var s in scrollerLinkList) 
     { 
      //Loop through the scroller link items and fix their ImageID, to remove any gaps if anything has been deleted 
      s.ImageID = "slide-img-" + count; 
      count++; 
     } 
     //Set this scrollerLinks ImageID to the last in the list. 
     scrollerLink.ImageID = "slide-img-" + count; 

     return scrollerLink; 
    } 

    public ActionResult Upload() 
    { 
     HttpPostedFileBase file = Request.Files["OriginalLocation"]; 
     HomeScrollerViewModel viewModel; 
     Regex imageFilenameRegex = new Regex(@"(.*?)\.(jpg|jpeg|png|gif)$"); 
     ScrollerLink scrollerLink = new ScrollerLink(); 
     if (file.ContentLength > 0) 
     { 
      if (!imageFilenameRegex.IsMatch(file.FileName)) 
      { 
       viewModel = new HomeScrollerViewModel() 
       { 
        ScrollerLink = scrollerLink, 
        HasError = true, 
        ErrorMessage = "Image must be .jpg, .jpeg, .png, or .gif" 
       }; 
      } 
      else 
      { 
       string filePath = Path.Combine(HttpContext.Server.MapPath("../Uploads"), Path.GetFileName(file.FileName)); 
       file.SaveAs(filePath); 
       viewModel = new HomeScrollerViewModel() 
       { 
        ScrollerLink = new ScrollerLink() 
        { 
         SlideID = scrollerLink.SlideID, 
         ImageID = scrollerLink.ImageID, 
         ImageUrl = filePath, 
         ImageAlt = scrollerLink.ImageAlt, 
         ContentTitle = scrollerLink.ContentTitle, 
         ContentDescription = scrollerLink.ContentDescription, 
         ImageLink = scrollerLink.ImageLink 
        } 
       }; 
      } 
     } 
     else 
     { 
      viewModel = new HomeScrollerViewModel() 
      { 
       ScrollerLink = scrollerLink, 
       HasError = true, 
       ErrorMessage = "Image is empty!? Try Again" 
      }; 
     } 
     return View(viewModel); 
    } 

    // 
    // POST: /HomeScroller/Create 

    [HttpPost] 
    public ActionResult Create(ScrollerLink scrollerLink) 
    { 
     try 
     { 
      scrollerLink = GenerateScrollerLinkImageID(scrollerLink); 

      dataContext.ScrollerLinks.InsertOnSubmit(scrollerLink); 
      dataContext.SubmitChanges(); 

      return RedirectToAction("Index"); 
     } 
     catch(Exception ex) 
     { 
      var viewModel = new HomeScrollerViewModel() 
      { 
       ScrollerLink = scrollerLink, 
       HasError = true, 
       ErrorMessage = ex.Message 
      }; 

      return View(viewModel); 
     } 
    } 
     } 
    } 

我遇到的问题是我的操作方法在窗体上的提交按钮被点击时未被调用。我从一个新项目(但不是在一个.ascx)尝试了这个例子,它的工作原理。我在这方面花费了太多时间,需要向前迈进,我是MVC的新手,拥有Web窗体背景。感谢您的帮助!任何想法堆栈溢出?

回答

0

问题是嵌套的形式。用户控件及其表单嵌套在我的.aspx页面上的另一个表单中。该动作现在正确启动。