1

AJAXを介してコントローラーにフォームを送信する際に問題が発生します。同様のエラーメッセージを持つ他の人々は、コントローラーメソッドスタブの型としてインターフェイスを使用することに関して問題を抱えているようですが、私にはその問題はありません。部分的なビューとコントローラーコードを含めました。情報が不足している場合は、お知らせください。ドロップダウンリストの値を変更した後のモデルの作成に関係があると思われますが、エラーメッセージはあまり役に立たないため、少し行き詰まっています。

私の部分的な見方:

<% using (Ajax.BeginForm("RequestDetails", "Home", new { RequestId = Model.Request.RequestId, RequestStatus = Model.Request.Status }, new AjaxOptions
        {
            HttpMethod = "POST",
            InsertionMode = InsertionMode.Replace,
            UpdateTargetId = "Details"
        },
        new { @class = "jqtransform" }))
        {%>

        <%= Html.LabelFor(m => Model.Request.Name) %>
        <p><%= Html.Encode(Model.Request.Name)%>&nbsp;</p>
        <%= Html.LabelFor(m => Model.Request.Status) %>
        <% if (Html.IsAdmin(this.Page))
        {%>
            <div class="rowElem">
            <%=Html.DropDownListFor(m => Model.Request.Status, (IEnumerable<SelectListItem>)ViewData["requestStatus"], null, new { onchange = "this.form.submit();" })%>
            </div>
    <%  }
        else
        { %>
            <p><%= Html.Encode(Model.Request.Status.GetStringValue())%>&nbsp;</p>
        <% } }%>    

私のコントローラー:

[HttpPost]
    public PartialViewResult RequestDetails(RequestDetailModel model, Guid RequestId, string RequestStatus)
    {
        if (ModelState.IsValid)
        {
            RequestMethods requestMethods = new RequestMethods();

            IRequest request = _requestRepo.GetRequestById(CurrentUser, RequestId, CompanyId);

            requestMethods.UpdateRequestStatus(request, CurrentUser, model.NewComment, model.Request.Status);

        }

        model.Request = _requestRepo.GetRequestById(CurrentUser, RequestId, CompanyId);

        return PartialView(model);
    }

スローされる正確なエラーは次のとおりです。

インターフェイスのインスタンスを作成できません。

System.RuntimeType.CreateInstanceSlow(Boolean publicOnly、Boolean fillCache)at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly、Boolean skipVisibilityChecks)at System.RuntimeTypeHandle.CreateInstance(RuntimeType type、Boolean publicOnly、Boolean noCheck、Boolean&canBeCached、RuntimeMethodHandle&ctor、Boolean&bNeedSecurityCheck) 、ブールfillCache)at System.Activator.CreateInstance(Type type、Boolean nonPublic)at System.Web.Mvc.DefaultModelBinder.CreateModel(ControllerContext controllerContext、ModelBindingContext bindingContext、Type modelType)at System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext 、ModelBindingContext bindingContext)at System.Web.Mvc.DefaultModelBinder.GetPropertyValue(ControllerContext controllerContext、ModelBindingContext bindingContext、System.Web.MvcのSystem.Web.Mvc.DefaultModelBinder.BindProperties(ControllerContext controllerContext、ModelBindingContext bindingContext)のPropertyDescriptor propertyDescriptor、IModelBinder propertyBinder)at System.Web.Mvc.DefaultModelBinder.BindProperty(ControllerContext controllerContext、ModelBindingContext bindingContext、PropertyDescriptor propertyDescriptor) System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext、ModelBindingContext bindingContext)at System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext、ParameterDescriptor parameterDescriptor)atSystemのDefaultModelBinder.BindComplexElementalModel(ControllerContext controllerContext、ModelBindingContext bindingContext、Object model) Web.Mvc.ControllerActionInvoker。System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext、String actionName)のGetParameterValues(ControllerContext controllerContext、ActionDescriptor actionDescriptor)

4

1 に答える 1

2

オブジェクトは表示されていませんRequestDetailModelが、インターフェイスタイプのプロパティがある場合、デフォルトのモデルバインダーはそれらを設定できません。たとえば、次の場合:

public class RequestDetailModel 
{
    public IRequest Request { get; set; }
}

インターフェースまたは抽象クラスはどこIRequestにありますか?これは機能しません。モデルでインターフェースを使用する場合は、カスタムモデルバインダーを作成する必要があります。抽象クラスで動作するが、インターフェースは同じであるようなカスタムモデルバインダーの一例を次に示します。

于 2012-04-20T06:14:48.960 に答える