簡體   English   中英

Model 是 null 在 ASP.NET MVC 中回發

[英]Model is null on post back in ASP.NET MVC

我正在嘗試生成復選框列表並將所選項目發布到我的 controller 的發布方法,但我的視圖 model 是 null。

請參閱下面的代碼和幫助。

在另一個頁面上使用以下按鈕調用視圖 -

<button class="btn btn-primary" id="historicalrecords"  
        onclick="location.href='@Url.Action("HistoricalWorkSubmissions", "Main", new {id= @Model.MessageIdsCombined.FirstOrDefault()})'">View Historical Works</button>

Model WorkSubmissions.cs

public class HistoricalWorkSubmission
{
    public string Society { get; set; }
    public string Rsa { get; set; }
    public DateTime ProcessingTime { get; set; }
    public bool isSelected { get; set; }

}

public class HistoricalWorkSubmisssionViewModel
{
    public List<HistoricalWorkSubmission> Submissions { get; set; }
}

MainController中的獲取方法:

[HttpGet]
public async Task<ActionResult> HistoricalWorkSubmissions(string id)
{
    WorkSearchViewModel workSearchViewModel = new WorkSearchViewModel
            {
                MessageId = id
            };

    var workSubmissions = await _swvManager.SearchAllWorkSubmissionsAsync(workSearchViewModel).ConfigureAwait(true);

    return View("~/Views/Main/HistoricalWorkSubmissions.cshtml", workSubmissions);
}

HistoricalWorkSubmissions.cshtml

 @model SWV.WorkPicture.UI.Models.HistoricalWorkSubmisssionViewModel

@{
    ViewBag.Title = "HistoricalSubmissions";
}

<h2>HistoricalSubmissions</h2>
@using (Html.BeginForm("HistoricalWorkSubmissions", "Main", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken();
    <fieldset>
        <div>
            <table class="table-bordered">
                @*@foreach (var submission in Model.Submissions)*@
                @for (int i=0; i < Model.Submissions.Count(); i++)
                {
                    var bmiWorks = Model.Submissions[i].Society + Model.Submissions[i].Rsa + "   " + Model.Submissions[i].ProcessingTime;
                    <tr>
                        <td>
                            @Html.CheckBoxFor(m => Model.Submissions[i].isSelected)
                            @Html.Label(bmiWorks)
                            @Html.HiddenFor(m => Model.Submissions[i])

                        </td>
                    </tr>
                }
            </table>
            <input class="button btn-primary" type="submit" value="Save"/>
        </div>
    </fieldset>
}

最后發布方法:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> HistoricalWorkSubmissions(HistoricalWorkSubmisssionViewModel workSubmissions)
{
    WorkSearchViewModel workSearchViewModel = new WorkSearchViewModel();
    workSearchViewModel.SwvId = "5124cfb4-afe8-4783-ab97-b9fbaaf6737d";

    var workPicturesx = await _swvManager.SearchAllWorkSubmissionsAsync(workSearchViewModel).ConfigureAwait(true);
           
    return View("~/Views/Main/HistoricalWorks.cshtml");
}

郵政- 郵政

abc在調試器中的值為 null。 請幫忙。

確保帖子中的字段名稱與 model 匹配。 Label 不是問題,但CheckBoxForHiddenFor會以發布到服務器的形式生成 Html input標簽。

@Html.CheckBoxFor(m => Model.Submissions[i].isSelected)
@Html.Label(bmiWorks)
@Html.HiddenFor(m => Model.Submissions[i].Society)
@Html.HiddenFor(m => Model.Submissions[i].Rsa)
@Html.HiddenFor(m => Model.Submissions[i].ProcessingTime)   

我還刪除了要submission的隱藏字段,因為它是 model 中的 object,而我們需要為每個屬性生成標簽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM