我无法从视图中获取已发布的表单值以绑定到控制器,因为它似乎在ViewModel中返回null,尽管发送了post请求的内容。我已经包含了视图和控制器的内容,因为我假设我必须缺少一些简单的东西,因为我对.NET MVC还不熟悉。
@model IEnumerable<MyPortal.ViewModels.SubscriptionsViewModel>
@{
ViewBag.Title = "Subscriptions";
}
<h2>Subscriptions</h2>
<div class="row">
<div class="col-md-6 offset3">
<form>
<div class="input-group">
<input type="text" value="" class="form-control" placeholder="Search by [Name or [ID]" />
<span class="input-group-btn">
<button class="btn btn-default" type="button">Search</button>
</span>
</div>
</form>
</div>
</div>
<div class="row" id="results">
<div class="col-md-6 offset3">
<table class="table">
<tr>
<th>MemberID</th>
<th>SubscriptionRef</th>
<th>SubType</th>
<th>StartDate</th>
<th>EndDate</th>
<th>PrimaryPays</th>
<th>Save</th>
</tr>
@foreach (var item in Model)
{
<tr class="searchResultRow">
@*
<input type="hidden" name="SubscriptionRef" value="@item.SubscriptionRef" />*@
@*
<td>@item.MemberID</td>
<td></td>
<td>@item.SubscriptionRef</td>
<td>@item.SubType</td>
<td>@item.StartDate</td>
<td>@item.EndDate</td>
<td class="text-center">@Html.CheckBox("PrimaryPaysInd", "PrimaryPaysIndBool") @item.PrimaryPaysInd @item.PrimaryPaysIndBool</td>*@
@using (Html.BeginForm("save", "secure", FormMethod.Post, new { redeemTransaction = Model }))
{
@Html.HiddenFor(modelItem => item.SubscriptionRef)
<td>@Html.DisplayFor(modelItem => item.MemberID)</td>
<td>@Html.DisplayFor(modelItem => item.SubscriptionRef)</td>
<td>@Html.DisplayFor(modelItem => item.SubType)</td>
<td>@Html.DisplayFor(modelItem => item.StartDate)</td>
<td>@Html.DisplayFor(modelItem => item.EndDate)</td>
<td>@Html.CheckBoxFor(modelItem => item.PrimaryPaysIndBool)</td>
<td asp-for="PrimaryPaysInd">@item.PrimaryPaysInd</td>
<td><button class="btn btn-primary" id="btnSave" name="save" value="Save"><i class="fa fa-save"></i> Save</button></td>
}
</tr>
}
</table>
</div>
</div>
<div class="row">
<div class="col-md-6 offset3">
</div>
</div>
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MyPortal.ViewModels;
using Microsoft.AspNetCore.Authorization;
using MyPortal.Models;
using System.Diagnostics;
using Microsoft.Extensions.Logging;
using Microsoft.EntityFrameworkCore;
using AutoMapper;
namespace MyPortal.Controllers
{
public class SecureController : Controller
{
private ILogger _logger;
private PortalContext _context;
public SecureController(ILogger<SecureController> logger, PortalContext context)
{
_context = context;
_logger = logger;
}
public ActionResult Search([FromForm]SubscriptionsViewModel subscriptions)
{
var searchParam = subscriptions.searchParam;
return RedirectToAction("index");
}
public IEnumerable<SubscriptionsViewModel> GetAllSubscriptionsById()
{
return (from s in _context.Subscriptions
where s.MemberID == 123
select new SubscriptionsViewModel
{
MemberID = s.MemberID,
SubTypeID = s.SubTypeID,
SubscriptionRef = s.SubscriptionRef,
StartDate = s.StartDate,
EndDate = s.EndDate,
PrimaryPaysInd = s.PrimaryPaysInd
}).Take(15).ToList();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult save([FromForm]SubscriptionsViewModel reedemTransaction)
{
_logger.LogInformation("******************");
_logger.LogInformation("EXECUTING POST");
_logger.LogInformation("******************");
if (ModelState.IsValid)
{
var newSubscription = Mapper.Map<Subscription>(reedemTransaction);
_logger.LogInformation("***********************");
_logger.LogInformation("SubscriptionRef: " + reedemTransaction.SubscriptionRef);
_logger.LogInformation("PrimaryPaysInd: " + reedemTransaction.PrimaryPaysInd);
_logger.LogInformation("************************");
return RedirectToAction("subscription", "secure");
}
return RedirectToAction("index", "secure");
}
}
}