如何在ASP.NET MVC中编写自定义的`@ Html.Partial()`方法?

时间:2014-11-28 04:17:11

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-5

我需要创建自定义@Html.Partial()方法。

使用案例

我有一个.cshtml页面,其中有多个部分,如下所示

<!-- EDUCATION -->
@Html.Partial("Templates/Create/Modules/Education")

<!-- JOBS -->
@Html.Partial("Templates/Create/Modules/Jobs")

我希望能够创建自定义.Partial()方法。像这样的东西

@Html.CustomPartial("Templates/Create/Modules/Jobs", "jobs", "edit")

最后两个参数分别为module idaction type id。使用这些值,我将在CustomPartial中确定我需要在输出中显示的内容。

我不知道该如何解决这个问题。请指教。

或者,如果有人可以指向我Html.Partial的源代码,那也会非常有帮助。

3 个答案:

答案 0 :(得分:2)

您已经可以使用接受@Html.Partial()

ViewDataDictionary重叠来执行此操作
@Html.Partial("Templates/Create/Modules/Jobs", new ViewDataDictionary { { "module", someValue }, {"edit", anotherValue }})

然后在部分

@if(ViewData["module"] == someValue)
{
  // do something
}
else
{
  // do something else
}

如果您仍然感兴趣,here is the source code

答案 1 :(得分:0)

这对我有用

public static class CustomHtmlHelpers
{
    public static MvcHtmlString RenderModule(this HtmlHelper helper,
                                             string partialViewName, 
                                             string moduleName,
                                             string actionType)
    {
        var isAccessAllowed = _someService.someMethod(userId, moduleName, actionType);    
        if (isAccessAllowed)
        {
            return helper.Partial(partialViewName);
        }
        else
        {
            return MvcHtmlString.Empty;
        }
    }
}

答案 2 :(得分:0)

private val DB_PATH = "/data/data/**YOUR_PACKAGE_NAME**/databases/"
private val DB_NAME = "**YOUR_DB_NAME**.db"

private fun copyDataBaseFromAssets(context: Context) {

        var myInput: InputStream? = null
        var myOutput: OutputStream? = null
        try {

            val folder = context.getDatabasePath("databases")

            if (!folder.exists())
                if (folder.mkdirs()) folder.delete()

            myInput = context.assets.open("databases/$DB_NAME")

            val outFileName = DB_PATH + DB_NAME

            val f = File(outFileName)

            if (f.exists())
                return

            myOutput = FileOutputStream(outFileName)

            //transfer bytes from the inputfile to the outputfile
            val buffer = ByteArray(1024)
            var length: Int = myInput.read(buffer)

            while (length > 0) {
                myOutput!!.write(buffer, 0, length)
                length = myInput.read(buffer)
            }

            //Close the streams
            myOutput!!.flush()
            myOutput.close()
            myInput.close()


        } catch (e: IOException) {
            e.printStackTrace()
        }

    }