日期:2014-05-17  浏览次数:20382 次

MVC下自定义控件的问题
以前用aspx时写的附件上传自定义控件,如图。


调用的时候:
<uc1:AttachmentMore ID="AttachmentMore1" runat="server" />


AttachmentMore1.PersonId = CurrentUserInfo.PersonID;
            AttachmentMore1.ModuleCode = BLL.ModuleCode.工作日志;


这个相信大家都很熟悉的哈。

今天尝试在MVC下实现这个功能,举步维艰呐,一下子没法适应。

问题1:
控制器中的ViewBag无法在自定义控件视图中获取,请问怎么解决?
控制器:
public ActionResult More(int menuid)
        {
            var AchmentSet = GetAttachmentSet(menuid);
            ViewBag.MaxSize = 10240;//限制附件上传的大小 默认10M
            ViewBag.LimitType = "";//限制附件上传的类型
            if (AchmentSet != null)
            {
                ViewBag.MaxSize = AchmentSet.MaxSize;
                ViewBag.LimitType = AchmentSet.NotAllowFileType;
            }
            return PartialView();
        }


ascx视图:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<script type="text/javascript" language="javascript">
    /*
    ShowAddFile('<%= this.ClientID%>');

    ShowAddImage('<%= this.ClientID%>');

    if (typeof (upload_limit) == "undefined") {
        upload_limit = 1;
    }

    if (typeof (attachMaxLength) == "undefined") {
        attachMaxLength = "@ViewBag.MaxSize";
    }
    if (typeof (limit_type) == "undefined") {
        limit_type = "@ViewBag.LimitType";
    }*/
    $(function () {
        alert("@ViewBag.MaxSize");
    });
</script>

用了@后发现根本就不会变黄色呢。

问题2:自定义控件参数设置的问题。
之前aspx时写的控件,可以在调用页面的cs代码中像操作服务器控件一样,名称.属性,直接赋值。
那在MVC下,怎么去做这个事情呢?因为参数比较多,所以觉得很纠结。

问题3,有没有现成的MVC下可用的自定义附件上传控件,我想做个参考。

分不多了,全给出来,希望有人可以解答一下,非常感谢。
------解决方案--------------------
我几年没用过webform了,如果没记错的话,@这是razor独有的语法,webform页面中不能这么用吧?你前面的<%=>这种用法才是webform中的
------解决方案--------------------
1.

(1)你在创建的时候要选择 mvc 3(或者其他版本)视图用户控件(ASPX). 要添加这个作为UserControl

(2)你的@是嵌套在<script>脚本里

 估计你创建的应该还是webform的应用!

2.mvc中的用户控件加载两种方法解决.

(1):js -可以尝试用JQuery  

$("#层id").lo