html.beginform到控制器,然后在div内返回partialview

时间:2014-03-28 14:54:05

标签: c# asp.net-mvc partial-views html-helper

如果我的话题不够清楚,我真的很抱歉。但我会尽力在这里尽可能清楚。

我有一个Html.BeginForm:

@using (Html.BeginForm("ShowExcelFile", "ShowExcel", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.TextBoxFor(m => m.Files, new { type = "file", name = "Files" })<br />
    <input type="submit" value="Upload file" />
}
<div id=partialDiv></div>

这填补了我的模型(我认为这是unessecery发布)。这个模型来到我的控制器,我正在使用该模型(一个HttpPostedFileBase)。在我的行动结束时,我将返回部分视图:

    [HttpPost]
    public ActionResult ShowExcelFile(ExcelModel model)
    {
        DataSet result = null;
        var file = model.Files[0];
        if (file != null && file.ContentLength > 0)
        {
            // .xlsx
            IExcelDataReader reader = ExcelReaderFactory.CreateOpenXmlReader(file.InputStream);

            // .xls
            // IExcelDataReader reader = ExcelReaderFactory.CreateBinaryReader(file.InputStream);

            reader.IsFirstRowAsColumnNames = true; // if your first row contains column names
            result = reader.AsDataSet();
        }
        return PartialView("ShowExcelFile", result);
    }

这很好用。问题是我希望partialview出现在partialDiv中。我已经尝试了Render.Partial,但它不会起作用,因为我的部分视图试图循环通过DataSet我发送部分视图。当控制器动作未被调用时,它是空的。

我的部分观点:

@model System.Data.DataSet                
<table cellspacing="0" width="80%" id"detailTable" class="getExcelTable">
<tbody>
@{var row = 0;}
@foreach (System.Data.DataRow data in Model.Tables[0].Rows)
{
    <tr>
        <td align="center">@(data.Table.Rows[row]["Row"].ToString())</td>    
        <td align="center">@(data.Table.Rows[row]["Date"].ToString())</td>
        <td align="center">@(data.Table.Rows[row]["Invoice amount"].ToString())</td>
        <td align="center">@(data.Table.Rows[row]["Interest rate"].ToString())</td>
        <td align="center">@(data.Table.Rows[row]["Interest amount"].ToString())</td>
        <td align="center">@(data.Table.Rows[row]["Amortization"].ToString())</td>
        <td align="center">@(data.Table.Rows[row]["Capital balance"].ToString())</td>
    </tr>
    row++;
}
</tbody>
</table>

之前我一直在使用Ajax.BeginForm并且它工作得非常好。问题是我需要它像Html.BeginForm一样工作:

Html.BeginForm("ShowExcelFile", "ShowExcel", FormMethod.Post, new { enctype = "multipart/form-data" })

例如,我无法在Ajax.BeginForm中使用enctype。在我的Html.BeginForm中,我无法找到类似&#34; UpdateTargetId&#34; Ajax.BeginForm可以使用。

无论如何要解决这个问题?我只想将我的部分视图显示在partialDiv-id中。

0 个答案:

没有答案
相关问题